【问题标题】:How and when does a parent class get instantiated in Python 3? [duplicate]在 Python 3 中如何以及何时实例化父类? [复制]
【发布时间】:2018-03-28 07:49:05
【问题描述】:

在 Python3 中,我假设创建具有父类的类会导致父类被实例化。这段代码表明它不是那样工作的。

class AClass:
    def __init__(self):
    print("make A")
    self.val = True
def f(self):
    return self.val

class BClass(AClass):
    def __init__(self):
        print("make B")
        self.val = False
    def g(self):
        return self.val

b = BClass()
print(b.f())
print(b.g())

输出是

make B
False
False

输出显示AClass.__init__(self) 未被调用,函数f 使用在BClass 中创建的self 值。如果存在AClass 实例,则g 函数将返回True

我正在学习 Python,我发现这种行为非常违反直觉。我想要的是在继承层次结构的每个级别都有一个self 实例变量。这在 Python3 中不正常吗?如果继承树中有self 实例,方法名称是否会遵循常规继承规则? Python会做其他事情来实现我想要的吗?

【问题讨论】:

  • 您应该首先在发布的代码中修复缩进...
  • “我想要的是在继承层次结构的每一层都有一个 self 实例变量。” 这意味着什么?当您实例化一个类时,您会得到 一个 对象,而不是层次结构中的每个类都有一个。

标签: python python-3.x inheritance instance self


【解决方案1】:

为了调用要使用的父级的init函数:

Super(self, BClass).__init__()

基本调用当前实例的父类(从而发送类实例的类型,以及当前实例化的类-self)。

另外我不觉得这个反直觉,你覆盖了父级的 init 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    相关资源
    最近更新 更多