将默认参数传递给子类的更好方法

Better way to pass default arguments to subclasses

假设我有一些 class 子class,它有一些默认的(可能是类似标志的)参数。处理传递此类参数的最佳方法是什么?我可以考虑做

class Dog():
    def __init__(self, noisy = False):
        self.noisy = noisy

    def bark(self):
        if self.noisy:
            print('YAP')
        else:
            print('yap')

class Beagle(Dog):
    def __init__(self, noisy = False):
       super().__init__(noisy)
    
dave = Beagle(noisy = True)
dave.bark()

但是这个用了七次noisy,我觉得一定有更好的办法。

首先,你可以在Beagle()的实例化中去掉noisy =,这是不需要的:

dave = Beagle(True)

其次,鉴于您的实施,您的 Beagle class 没有理由存在。它不添加任何功能,也不以任何方式专门化 Dog。如果有的话,Dog 的可能子 classes 是有意义的:

class NoisyDog(Dog):
    def __init__(self):
       super().__init__(True)

class QuietDog(Dog):
    def __init__(self):
       super().__init__(False)

您也可以在 super().__init__() 的调用中保留 noisy= 以获得更好的可读性,但同样不需要这样做。

除此之外,您真的无能为力。如果您需要 class 属性,您必须将其分配给 class (self.foo = bar),然后使用其名称引用它...