从python中的其他实例访问实例变量

时间:2016-06-30 01:30:49

标签: python

我正在尝试从另一个实例中找到访问实例变量的最佳方法。到目前为止,我已经能够将该变量作为参数传递并将其保存在新实例中。但我想知道是否有某种“全球”变量将是最好的。特别是如果类来自不同的模块。

这是我的例子。

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()

这里当我生成BList()时,我需要将“globalObject”作为参数“B(self.globalObject,i)”传递,然后将此对象保存到B.globalObject中,butif我有许多需要的类访问该全局对象我不确定是否总是将其作为参数传递将是最佳选择。访问它的最佳方法是什么,而不必在创建实例时始终将其作为参数传递?

我希望我能正确地解释道路。谢谢你提前。

2 个答案:

答案 0 :(得分:0)

可以在python中使用全局变量。

class A(object):
    def __init__(self):
        global globalObject
        globalObject = "Global Object"
        self.listB = self.generateBList()


    def generateBList(self):
        return [B(i) for i in range(10)]



class B(object):
    def __init__(self, index):
        self.index = index

    def splitGlobalObject(self):
        return globalObject.split(" ")

通常你想避免全局变量。有关更多示例,请访问http://www.python-kurs.eu/python3_global_lokal.php

答案 1 :(得分:0)

你的例子似乎不必要地复杂化,所以我会尝试说明我以前用过的一种方法,我认为可能会做你想要的。如果您想要创建一个“世界”,这是您想要发生的事情的舞台,您可以在世界范围内拥有每个类实例,了解世界。像这样:

class Thing(object):
    def __init__self(self, world, name):
        self.world = world
        self.name = name

class Word(object):
    def __init__(self):
        self.everyone = [Thing(self, i) for i in range(10)]

if __name__ == '__main__':
    world = World()

在此示例中,World类实例带有一个名为everyone的属性,该属性是十个Thing个对象的列表。更重要的是,对于您的示例,Thing的每个实例现在都带有一个指向世界级的self.world指针。因此,所有事物都可以通过self.world.everyone以及世界上任何其他事物访问所有其他事物。我还将i传递给每个Things init,因此它们具有0到9之间整数形式的唯一名称,但这可能是您需要的额外名称。

从这里开始,你的实例基本上没有通过方法对彼此做任何事情,并且没有使用大量的全局变量。

编辑:我应该补充说,来自不同模块的内容在这里没有任何区别,只需导入任意数量的内容,并创建将World实例的知识传递到其中的实例。或者显然根据您的需求定制结构,同时使用相同的想法。