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

2024-09-30 08:26:27 发布

您现在位置: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()

在这里,当我generateBList()时,我需要始终将“globalObject”作为参数“B”传递(self.global对象,然后这个对象被保存到B.globalObject中,但是如果我有很多类需要访问这个全局对象,我不确定是否总是将它作为参数传递是最好的选择。在创建实例时,访问它的最佳方式是什么,而不必总是将其作为参数传递?在

我希望我能正确地解释我的方法。提前谢谢。在


Tags: 对象实例方法selfindexreturnobjectinit
2条回答

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

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实例的知识传递给它们。或者很明显,在使用相同的想法的同时根据您的需要调整结构。在

在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。在

相关问题 更多 >

    热门问题