在超类构造函数或子类构造函数中调用方法?

时间:2010-05-01 08:37:46

标签: python oop constructor

1。将配置传递给隐含调用__init__的{​​{1}}方法:

register

2。在子类'class Base: def __init__(self, *verbs): if not verbs: verbs = "get", "post" self._register(verbs) def _register(self, *verbs): pass class Sub(Base): def __init__(self): super().__init__("get", "post", "put") 方法中明确地调用register

__init__

我使用Python 3。

什么是更好或更pythonic?或者只是品味问题?

4 个答案:

答案 0 :(得分:3)

我认为这些选择都不好。最接近的解决方案可能是:

class Base(object):

    def __init__(self):
        self._register("get", "post")


class Sub(Base):

    def __init__(self):
        super(Sub, self).__init__()
        self._register("put")

我也想知道在班级注册动词是否更好。对于所有实例,它们可能都是相同的,那么为什么它们会单独为每个实例注册?

答案 1 :(得分:0)

如果扩展基类的所有内容都是这样的,我会亲自从基类的构造函数调用。如果没有,并且行为有所不同,我会从子类中调用......

至于Pythonic是什么 - 不要订阅邪教 - 编写有效的代码......

马丁

答案 2 :(得分:0)

恕我直言,第二种方式更好。 “更加pythonic”的方式是使事物尽可能明确。您不必跟踪父类构造函数以查看它对这些参数的作用......

答案 3 :(得分:0)

我肯定会使用第一种形式。我会问自己的问题是:“如果基类的初始化被修改,有一天怎么办?我想让子类从更新中受益吗?”。几乎在我的所有代码中,答案都是响亮的......:)