use*_*543 27 python variables class
我正在编写一个利用多个类的程序.我有一个专门用于确定一组变量值的类.然后,我希望能够使用其他类访问这些变量的值.我的代码如下:
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
Run Code Online (Sandbox Code Playgroud)
我使用classA初始化2个变量(var1和var2).然后我使用methodA来添加它们,将结果保存为var1(我认为这将使var1 = 3和var2 = 2).我想知道的是,如何让ClassB能够从ClassA获取var1和var2的值?
Ste*_*ima 46
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
Run Code Online (Sandbox Code Playgroud)
另一方面 - 如果您要使用类变量,则可以访问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
Run Code Online (Sandbox Code Playgroud)
但请注意,类变量在其类的所有实例之间共享.
你能解释一下你为什么要这样做吗?
你跟玩弄实例变量/属性,不会从一类迁移到另一个(他们势必甚至没有ClassA
,而是一个特定的实例中ClassA
,你创建的,当你写的ClassA()
).如果您希望将一个类中的更改显示在另一个类中,则可以使用类变量:
class ClassA(object):
var1 = 1
var2 = 2
@classmethod
def method(cls):
cls.var1 = cls.var1 + cls.var2
return cls.var1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将从继承中ClassB
获取值ClassA
.然后,您可以通过实例访问类变量ClassA.var1
,ClassB.var1
甚至可以从实例访问类变量ClassA().var1
(前提是您尚未添加var1
将在属性查找中的类变量之前解析的实例方法.
在我知道这是否是我实际推荐的行动方案之前,我必须更多地了解您的特定用例...