为类的实例变量传递参数

时间:2017-11-07 15:05:41

标签: python python-2.7 python-3.x subclass

如何传递类的实例变量的参数,如下所示,当我初始化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)

2 个答案:

答案 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)
相关问题