私は多くのクラスを作成した小さな個人的なプロジェクトに取り組んでいます。各クラスは、そのすべてのインスタンスを含む独自のレジスタを持っています複数のクラスのメソッドを定義する
class IterReg(type):
# Register of all objects for iteration
def __iter__(cls):
return iter(cls._reg.values())
私は各クラスに使用する「テンプレート」
class Point(object):
# Point object
__metaclass__ = IterReg
_reg = dict()
counter = 0
# Initialize
def __init__(self, name):
self.name = name
self._reg[self.name] = self
Point.counter += 1
# Return register keys
@staticmethod
def get_reg_keys(cls):
return cls._reg.keys()
そして、いくつかの(MWEのために重要ではない)他のものです。 私は初期化する場合は、例えば、a = Point("Point A")
、私はそれから呼び出すことができます。
>>> a.get_reg_keys()
['Point A']
を(明らかに)私は
Point.get_reg_keys()
から今、私の質問を取得することと同じ結果である:定義する方法がありますこのメソッドはすべてのクラスに対して一度(つまり、何とかmetaclass
にあります)。
class IterReg(type):
# Register of all objects for iteration
def __iter__(cls):
return iter(cls._reg.values())
def get_reg_keys(cls):
return cls._reg.keys()
をしかし、私はちょうどそれの任意のインスタンスからクラスからget_reg_keys()
(すなわちPoint.get_reg_keys()
)とされていない呼び出すことができます。 私が最初にこのような何かが働いていたと思いました。
'get_reg_keys'メソッドと一般的な' __init__'メソッドを持つ基本クラス(つまり 'RegisteredBase')を作成するだけではどうですか?それから 'Point'クラスをサブクラス化してください。 – Kendas
'Point.get_reg_keys()'は静的関数を呼び出す正しい方法です。 –