如何从一个类访问另一个类的变量?
- 2025-02-25 09:07:00
- admin 原创
- 22
问题描述:
我正在编写一个使用多个类的程序。我有一个类专门用于确定一组变量的值。然后我希望能够使用其他类访问这些变量的值。我的代码如下所示:
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 的值?
解决方案 1:
var1
和var2
是实例变量ClassA
。这意味着您必须将的实例发送ClassB
给 ClassB 才能访问它,即:
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
另一方面 - 如果您使用类变量,您可以访问 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
但请注意,类变量在其类的所有实例之间共享。
解决方案 2:
你能解释一下为什么你想这样做吗?
您正在尝试使用不会从一个类迁移到另一个类的实例变量/属性(它们甚至不绑定到 ,而是绑定到您在编写 时创建的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.var1
,ClassB.var1
甚至可以从实例访问ClassA().var1
(前提是您没有添加实例方法var1
,该方法将在属性查找中在类变量之前解析)。
我必须先对您的具体用例有更多的了解,然后才能知道这是否是我真正推荐的行动方案……
解决方案 3:
var1 和 var2 是ClassA的实例变量。创建 ClassB 的实例,当调用 methodA 时,它将首先检查子类(ClassB )中的方法A,如果ClassB中不存在 methodA,则需要使用super() 方法调用ClassA ,这将获取ClassA中实现的所有方法。现在,您可以访问 ClassB 的所有方法和属性。
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):
super().__init__()
print("var1",self.var1)
print("var2",self.var2)
object1 = ClassB()
sum = object1.methodA()
print(sum)
解决方案 4:
我们可以使用对象引用来访问/传递参数/变量从一个类到另一个类。
#Class1
class Test:
def __init__(self):
self.a = 10
self.b = 20
self.add = 0
def calc(self):
self.add = self.a+self.b
#Class 2
class Test2:
def display(self):
print('adding of two numbers: ',self.add)
#creating object for Class1
obj = Test()
#invoking calc method()
obj.calc()
#passing class1 object to class2
Test2.display(obj)
解决方案 5:
只需在类中创建变量。然后从该类继承以访问其变量。但在访问它们之前,必须调用父类来初始化变量。
class a:
def func1(self):
a.var1 = "Stack "
class b:
def func2(self):
b.var2 = "Overflow"
class c(a,b):
def func3(self):
c.var3 = a.var1 + b.var2
print(c.var3)
a().func1()
b().func2()
c().func3()
解决方案 6:
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