Q.どのように渡す必要がありますか?定数引数をPython基本クラスに渡しますか?Pythonは定数クラスを基底クラスに継承します
典型的な例を使用して、クラスCat
とDog
(どちらもAnimal
に由来)を持っています。 x.sound
を呼び出すと、適切な単語("meow"
,"woof"
)が返されます。
私の問題は、クラスのすべてのインスタンスが同じ音を出すので、私はsound
Animal
に渡すことができますしながら、ということである。これは、我々はすべてのインスタンスで"woof"
を保存するので、無駄なようだと
class Animal:
def __init__(sound):
self.sound = sound
class Dog:
def __init__():
super().__init__("woof")
私が持っています百万匹の犬と10億匹の猫。私の代わりに、メソッドを使用することもできます。
class Animal:
@staticmethod
def sound():
raise NotImplementedError("Abstract")
class Dog:
@staticmethod
def sound():
return "woof"
しかしを、今、私の動物はすべての非常に静かなので、これは簡単に見逃している他の誰かが一緒に来て、私の苦労し書かれた説明書を読まずにBird
クラスを書き込み、唯一発見したときメソッドが実際に呼び出されたときに青い月に一度メソッドを忘れてしまった。
私は理想的には、Animal
クラス自体がパラメータを取るようなC++のテンプレートが好きです。すぐにエラーが発生することなく見落とすことができず、インスタンスごとにそれ以上のスペースを占めることはありません。
template<sound>
class Animal()
. . .
私はPythonで何をしていますか?
私はすべての犬のインスタンスは、文字列のインターナショナルのために同じ実際の文字列オブジェクトを受け取る必要があると思います。 –
私はあまりよく分かりませんが、これには '__slots__'が必要かもしれません。 – vks
@PaulRooneyはまだすべてのオブジェクトのポインタを持っています。また、中身の文字列へのポインタは、64ビットシステムでは8バイトになります。これは "woof"文字列よりも長くなります。 –