如何将变量从一个类访问到另一个类?

2024-04-25 20:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个利用多个类的程序。我有一个类专门用于确定一组变量的值。然后我希望能够通过其他类访问这些变量的值。我的代码如下:

class ClassA(object):
    def __init__(self):
        self.var1 = 1
        self.var2 = 2

    def methodA(self):
        self.var1 = self.var1 + self.var2
        return self.var1


class ClassB(ClassA):
    def __init__(self):
        self.var1 = ?
        self.var2 = ?

object1 = ClassA()
sum = object1.methodA()
print sum

我使用classA初始化2个变量(var1和var2)。然后我使用methodA添加它们,将结果保存为var1(我认为这将使var1=3和var2=2)。我想知道的是,如何让ClassB从ClassA获取var1和var2的值?


Tags: 代码self程序利用objectinitdefclass
3条回答

var1var2instance variables。这意味着您必须将ClassA的实例发送到ClassB,以便类B访问它,即:

class ClassA(object):
    def __init__(self):
        self.var1 = 1
        self.var2 = 2

    def methodA(self):
        self.var1 = self.var1 + self.var2
        return self.var1



class ClassB(ClassA):
    def __init__(self, class_a):
        self.var1 = class_a.var1
        self.var2 = class_a.var2

object1 = ClassA()
sum = object1.methodA()
object2 = ClassB(object1)
print sum

另一方面-如果要使用class variables,则可以访问var1和var2,而无需将object1作为参数发送给ClassB。

class ClassA(object):
    var1 = 0
    var2 = 0
    def __init__(self):
        ClassA.var1 = 1
        ClassA.var2 = 2

    def methodA(self):
        ClassA.var1 = ClassA.var1 + ClassA.var2
        return ClassA.var1



class ClassB(ClassA):
    def __init__(self):
        print ClassA.var1
        print ClassA.var2

object1 = ClassA()
sum = object1.methodA()
object2 = ClassB()
print sum

但是,请注意,类变量在其类的所有实例之间共享。

你能解释一下你为什么要这样做吗?

你在玩弄那些不会从一个类迁移到另一个类的实例变量/属性(它们甚至不会绑定到ClassA,而是绑定到你在编写ClassA()时创建的ClassA的特定实例)。如果要在一个类中显示另一个类中的更改,可以使用类变量:

class ClassA(object):
   var1 = 1
   var2 = 2
   @classmethod
   def method(cls):
       cls.var1 = cls.var1 + cls.var2
       return cls.var1

在这种情况下,ClassB将从继承中获取ClassA上的值。然后,您可以通过ClassA.var1ClassB.var1甚至从实例ClassA().var1访问类变量(前提是您没有添加实例方法var1,该方法将在属性查找中的类变量之前解析)。

在我知道这是否是一个我真正推荐的行动方案之前,我必须对您的特定用例有一点了解。。。

class ClassA(object):
    def __init__(self):
        self.var1 = 1
        self.var2 = 2
    def method(self):
        self.var1 = self.var1 + self.var2
        return self.var1

class ClassB(ClassA):
    def __init__(self):
        ClassA.__init__(self)

object1 = ClassA() 
sum = object1.method()  
object2 = ClassB() 
print sum

相关问题 更多 >