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

假设我有一个类作为子类,它有一些默认的(可能是一个类似标志的)参数。处理传递这样一个论点的最佳方法是什么。我可以考虑做

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 七次,我觉得一定有更好的方法。

ttc123 回答:将默认参数传递给子类的更好方法

首先,您可以在 noisy = 的实例化中删除 Beagle(),它是不需要的:

dave = Beagle(True)

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

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

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

您也可以在对 noisy= 的调用中保留 super().__init__() 以提高可读性,但这也是不必要的。

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

本文链接:https://www.f2er.com/287.html

大家都在问