我试图找到从另一个实例访问实例变量的最佳方法。到目前为止,我已经能够将该变量作为参数传递,并将其保存在新实例中。但我想知道是否有某种“全局”变量能发挥最好的作用。特别是如果类来自不同的模块。在
这是我的例子。在
class A(object):
def __init__(self):
self.globalObject = "Global Object"
self.listB = self.generateBList()
def generateBList(self):
return [B(self.globalObject, i) for i in range(10)]
class B(object):
def __init__(self, globalObject, index):
self.index = index
self.globalObject = globalObject
def splitGlobalObject(self):
return self.globalObject.split(" ")
a = A()
firstB = a.listB[0]
print firstB.splitGlobalObject()
在这里,当我generateBList()时,我需要始终将“globalObject”作为参数“B”传递(self.global对象,然后这个对象被保存到B.globalObject中,但是如果我有很多类需要访问这个全局对象,我不确定是否总是将它作为参数传递是最好的选择。在创建实例时,访问它的最佳方式是什么,而不必总是将其作为参数传递?在
我希望我能正确地解释我的方法。提前谢谢。在
你的例子似乎不必要的复杂,所以我将试着举例说明我以前用过的一种方法,我认为可以做你想做的事。如果您想创建一个“world”,这个“world”是您想要发生的事情的舞台,那么您可以在这个世界中拥有每个类实例,了解这个世界。像这样:
在本例中,
World
类实例包含一个名为everyone
的属性,该属性是十个Thing
对象的列表。对于您的示例,更重要的是,Thing
的每个实例都带有一个名为self.world
的指针,该指针指向世界级。所以所有的事物都可以通过self.world.everyone
访问所有其他事物,以及世界上的任何其他事物。我还将i
传递到每个Things init中,这样它们就有一个0到9之间的整数形式的唯一名称,但这可能是您需要的额外名称。在从这里开始,基本上没有任何实例不能通过方法相互作用,而且所有这些都不需要使用大量的全局变量。在
编辑:我应该补充一点,来自不同的模块在这里没有什么区别,只要导入任意多个模块并创建它们的实例,将
World
实例的知识传递给它们。或者很明显,在使用相同的想法的同时根据您的需要调整结构。在在python中可以使用全局变量。在
通常你想避免全局变量。更多示例请访问http://www.python-kurs.eu/python3_global_lokal.php。在
相关问题 更多 >
编程相关推荐