我应该如何将常量参数传递给Python基类?你知道吗
使用典型示例,我有类Cat
和Dog
(都是从Animal
派生的)。
调用x.sound
应该返回适当的单词("meow"
,"woof"
)。你知道吗
我的问题是,类的所有实例发出相同的声音,因此,虽然我可以将sound
传递给Animal
:
class Animal:
def __init__( sound ):
self.sound = sound
class Dog:
def __init__():
super().__init__( "woof" )
这似乎是浪费,因为我们在每一个实例中都存储"woof"
,而我有一百万只狗和十亿只猫。我可以用一种方法来代替:
class Animal:
@staticmethod
def sound():
raise NotImplementedError("Abstract")
class Dog:
@staticmethod
def sound():
return "woof"
但是现在,由于我的动物都非常安静,当其他人来编写一个Bird
类而没有阅读我费尽心思编写的文档,并且在实际调用该方法时才发现他们偶尔忘记一次该方法时,很容易忽略这一点。你知道吗
理想的是,我喜欢C++的模板,其中^ {< CD3>}类本身接受参数——它不会被忽略而不会造成立即错误,并且不会占用每个实例更多的空间。你知道吗
template<sound>
class Animal()
. . .
有没有办法实现我在Python中所追求的目标?你知道吗
你可以尝试使用工厂设计模式。像这样:
上面的代码生成以下输出
当然,用户可能忘记注册类,但是只要其他用户使用
AnimalFactory
来创建新的动物,就可以了。你知道吗相关问题 更多 >
编程相关推荐