0
Q.我應該如何通過常量將參數傳遞給Python基類?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++的模板,其中Animal
類本身採用參數 - 它不能錯過而不會導致即時錯誤,並且不會每個實例佔用更多空間。
template<sound>
class Animal()
. . .
是否有方法可以完成我在Python中完成的任務?
我認爲所有的狗實例應該收到相同的實際字符串對象由於字符串interning。 –
我不是很確定,但是你可能需要'__slots__'這個 – vks
@PaulRooney仍然爲每個對象都提供了一個指針。另外,在64位系統上指向interned字符串的指針將爲8個字節,比「woof」字符串本身長。 –