为 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 变量。