如何传递类的实例变量的参数,如下所示,当我初始化ClassElement时,如何为子类传递 sclass
class Subclass(object):
def __init__(self, arg):
self.arg = arg
class ClassElement(object):
sclass = Subclass('sclass')
def __init__(self, argA: str, argB: str):
self.argA = argA
self.argB = argB
tcl = ClassElement('argA', 'argB')
print(tcl.argA)
print(tcl.argB)
print(tcl.sclass)
print(tcl.sclass.arg)
答案 0 :(得分:1)
您的代码将sclass定义为类变量,并且您正在检查实例变量tcl.sclass.arg 。这是两件不同的事情;类变量和实例变量。
如果要对每个实例使用相同的对象 - 请使用类变量。 如果对象对每个实例都是唯一的 - 使用实例变量。
每个实例都有sclass:
class ClassElement(object):
def __init__(self, argA, argB, sclass):
self.argA = argA
self.argB = argB
self.sclass = Subclass(sclass)
所有实例共享单个对象(您的代码):
>>> ClassElement.sclass
<__main__.Subclass object at 0x02942BF0>
>>> ClassElement.sclass.arg
'sclass'
>>> tcl2 = ClassElement('argA', 'argB')
>>> id(tcl2.sclass)
43265008
>>> id(tcl.sclass)
43265008
好的,我想我现在明白你在找什么
class ClassElement(object):
sclass = None
def __init__(self, argA, argB, sclass):
self.argA = argA
self.argB = argB
ClassElement.sclass = Subclass(sclass)
这将在每次创建实例时更新类变量。
答案 1 :(得分:0)
class Subclass(object):
def __init__(self, arg):
self.arg = arg
class ClassElement(object):
def __init__(self, argA, argB):
self.argA = argA
self.argB = argB
self.sclass = Subclass('sclass')
tcl = ClassElement('argA', 'argB')
print(tcl.argA)
print(tcl.argB)
print(tcl.sclass)
print(tcl.sclass.arg)