1
我正在創建一個小型個人項目,我創建了許多類。每個類都有包含其所有的情況下,自己的寄存器:定義多個類的方法
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()'是調用該靜態函數的正確方法,儘管 –