2024-05-15 03:24:00 发布
网友
这让我困惑,我怎么找不到一个明确的解释。 为什么以及何时需要在子类的同名方法内调用基类的方法?
class Child(Base): def __init__(self): Base.__init__(self) def somefunc(self): Base.somefunc(self)
我猜你这样做是因为你不想完全覆盖基类中的方法。真的只有这些吗?
它完全取决于类和方法。
如果您只想在基本方法运行之前/之后执行某些操作,或者使用不同的参数调用它,那么您显然要在子类的方法中调用基本方法。
如果要替换整个方法,显然不需要调用它。
通常,如果希望通过修改扩展功能,但不完全替换基类方法,则可以执行此操作。defaultdict就是一个很好的例子:
defaultdict
class DefaultDict(dict): def __init__(self, default): self.default = default dict.__init__(self) def __getitem__(self, key): try: return dict.__getitem__(self, key) except KeyError: result = self[key] = self.default() return result
注意,正确的方法是use ^{} instead of directly calling the base class。就像这样:
class BlahBlah(someObject, someOtherObject): def __init__(self, *args, **kwargs): #do custom stuff super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)
它完全取决于类和方法。
如果您只想在基本方法运行之前/之后执行某些操作,或者使用不同的参数调用它,那么您显然要在子类的方法中调用基本方法。
如果要替换整个方法,显然不需要调用它。
通常,如果希望通过修改扩展功能,但不完全替换基类方法,则可以执行此操作。
defaultdict
就是一个很好的例子:注意,正确的方法是use ^{} instead of directly calling the base class 。就像这样:
相关问题 更多 >
编程相关推荐