Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取变量_Python - Fatal编程技术网

Python 获取变量

Python 获取变量,python,Python,我有一个愚蠢的问题: 有没有办法在另一个类中使用一个类中的实例变量? 我想继承可能是一种方式,但我不知道怎么做:( 例如: class A(): def __init__(self): self.var1 = 12 self.var2 = C() def start(self): self.var1=11 B() class B(): def doSomething(self): var

我有一个愚蠢的问题:


有没有办法在另一个类中使用一个类中的实例变量? 我想继承可能是一种方式,但我不知道怎么做:(

例如:

class A():
    def __init__(self):
        self.var1 = 12
        self.var2 = C()

    def start(self):
        self.var1=11
        B()

class B():

    def doSomething(self):
        varXX = "  here I would like to have objet self.var2 from A()"         

class C():
    def makeUI(self):
        something

thx帮助信息

有没有办法在另一个类中使用一个类中的实例变量?没有。实例变量是特定于对象的,而不是特定于类的。要么您需要访问该类的对象,要么您有设计问题。您可能需要将它们设置为类变量

class A():
    def __init__(self):
        self.var1 = 12
        self.var2 = C()

    def start(self):
        self.var1=11
        B(self)             # pass this instance into the initialisation of B

class B():
    def __init__(self, a):
        self.a = a          # save reference to the A() instance

    def doSomething(self):
        varXX = self.a.var2 
如果这些变量不是特定于实例的,则按如下方式将它们设置为类变量和访问

>>> class A():
    _init_done = False
    def __init__(self):
        if not A._init_done:
            A.var1 = 12
            A.var2 = C()
            A._init_done = True
def start(self):
    A.var1=11
    B()            
>>> class B():    
    def doSomething(self):
        print A.var1           
>>> class C():
    def makeUI(self):
        something            
>>> x = A()
>>> y = B()
>>> y.doSomething()
12
>>> x.start()
>>> y.doSomething()
11

我认为你应该尝试改进这个问题。这是一个很奇怪的概念。每次我创建
a()
的实例时,
a.var2
都会更新为
C()的新实例
。不确定你会用它做什么for@gnibbler:我刚刚扩展了使用类变量的概念。如果您不想创建新实例(),您可以轻松添加一个标志来检查首次初始化。我已更新了答案