我正在开发一个小型个人项目,在其中创建了许多类。每个类都有自己的寄存器,其中包含其所有实例:
class IterReg(type):
# Register of all objects for iteration
def __iter__(cls):
return iter(cls._reg.values())
我为每个类使用的"template"是
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()
现在我的问题是:有没有一种方法可以为所有类定义一次该方法(即在元类
中)。
我首先认为这样的方法有效:
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()
但是我可以从类(即 Point.get_reg_keys()
)调用 get_reg_keys()
而不是从它的任何实例。
最佳答案
您可以定义一个具有 .get_reg_keys()
的泛型类,并在您想要使用该方法时对其进行子类化。在下面的示例中,任何继承自 Generic
的类都将具有 .get_reg_keys()
方法。
class IterReg(type):
# Register of all objects for iteration
def __iter__(cls):
return iter(cls._reg.values())
class Generic(object):
@classmethod
def get_reg_keys(cls):
return cls._reg.keys()
class Point(Generic):
# Point object
__metaclass__ = IterReg
_reg = dict()
counter = 0
# Initialize
def __init__(self, name):
self.name = name
self._reg[self.name] = self
Point.counter += 1
a = Point('Point A')
a.get_reg_keys()
# returns:
['Point A']
关于python - 为多个类定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45189066/