python - super 应该始终位于 __init__ 方法的顶部,还是可以位于底部?

标签 python

在大多数 Python 示例中,当 super 用于调用父类的构造函数时,它出现在顶部。

将它放在 init 方法的底部是一种不好的形式吗?

在下面的示例中,super 位于 A 的构造函数的底部,但位于 B 的构造函数的顶部。

class A:
    def __init__(self):
        # Do some stuff
        b = result_of_complex_operation()
        super(A, self).__init__(b)

class B:
    def __init__(self):
        super(A, self).__init__(b)
        # Do some stuff

最佳答案

这完全取决于用例。考虑一下。

class Foo():
    def __init__(self):
        print(self.name)

    @property
    def name(self):
        return self.__class__.__name__


class Bar(Foo):
    def __init__(self, name):
        self.name = name
        super().__init__()

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self, name):
        self.__name = name

如果你在 Bar.__init__ 中设置 self.name 之前调用 super() 你会得到一个 AttributeError 因为尚未设置所需的名称。

关于python - super 应该始终位于 __init__ 方法的顶部,还是可以位于底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45722427/

相关文章:

python - 找到最短的子串,其替换使得字符串中每个字符的数量相等

python - 在 Intel Mac OS X 上将 PATH AMPL 求解器与 Pyomo 结合使用

Python 验证错误对象不是 json 可序列化的

python - 提高iloc效率——用startwith()合并两张表

python - 即使在更改代码后,AWS Lambda python 函数输出仍然是 "Hello from Lambda"

python - Django 。字段集有限的代理模型

python - 为什么弹性会引发此异常 "elasticsearch.exceptions.ConnectionError: ConnectionError(check_hostname requires server_hostname)"?

python - 使用 python-gitlab 将文件上传到 Gitlab 时出现问题

python - 如何向 wx.TreeCtrl 项目添加额外的数据? wxpython

python - 组织 __init__.py 文件时循环导入错误