如何以正确的方式装饰类以便能够从装饰类继承类?有没有正确的方法?装饰类继承和类方法
如果我会做这样的事情:
def singleton(cls):
inst = {}
def get(*args, **kwargs):
cls_id = id(cls)
if cls_id not in inst:
inst[cls_id] = cls(*args, **kwargs)
return inst[cls_id]
return get
@singleton
class A(object):
@classmethod
def cls_meth(cls):
return cls
我有没有机会继承一个以上的一类,因为之前我把它称作是这样的功能。与类方法相同的问题,函数没有类方法。
class B(A): # No way! `A` is the function!
pass
A.cls_meth() # AttributeError: 'function' object has no attribute 'cls_meth'
即使我做这样的事情:
class SingletonDecorator(object):
inst = {}
def __init__(self, cls):
self.cls = cls
def __call__(self, *args, **kwargs):
cls_id = id(self.cls)
if cls_id not in self.inst:
self.inst[cls_id] = self.cls(*args, **kwargs)
return self.inst[cls_id]
@SingletonDecorator
class A(object):
pass
当我从A
类继承一个类时,它会从SingletonDecorator
类,而不是A
继承。
class B(A): # No no no! I do not need a `SingletonDecorator` child class...
pass
有通过__metaclass__
修改类实例的方式,但却是完全另一回事了
这是不相关的问题,但没有必要使用'ID()'一类的字典键,你可以只使用类本身(类可哈希)。 – kindall