为 class 传递实例变量的参数
pass argument for instance variable for class
如何为 class 的实例变量传递参数,如下所示,如何为 Subclass 传递 sclass当我初始化 ClassElement
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)
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)
您的代码将 sclass 定义为 class 变量,并且您正在检查一个 实例变量 tcl.sclass.arg 。这是两个不同的东西; class 变量和实例变量。
如果您想对每个实例使用相同的对象 - 使用 class 变量。
如果对象对于每个实例都是唯一的 - 使用实例变量。
每个实例都有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)
这将在每次创建实例时更新 class 变量。
如何为 class 的实例变量传递参数,如下所示,如何为 Subclass 传递 sclass当我初始化 ClassElement
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)
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)
您的代码将 sclass 定义为 class 变量,并且您正在检查一个 实例变量 tcl.sclass.arg 。这是两个不同的东西; class 变量和实例变量。
如果您想对每个实例使用相同的对象 - 使用 class 变量。 如果对象对于每个实例都是唯一的 - 使用实例变量。
每个实例都有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)
这将在每次创建实例时更新 class 变量。