decorator以防止直接调用基类方法。
virtualmethod的Python项目详细描述
decorator以防止直接调用基类方法。
用法
from virtualmethod import virtualmethod class Base(object): @virtualmethod def my_virtual_method(self): print "This is a virtual method. Call me from a subclass!" class A(Base): pass class B(Base): def my_virtual_method(self): print "I went ahead and implemented my own version." base = Base() a = A() b = B() a.my_virtual_method() -> This is a virtual method. Call me from a subclass! b.my_virtual_method() -> I went ahead and implemented my own version. base.my_virtual_method() -> Traceback (most recent call last): File "<stdin>", line 1, in <module> File "virtualmethod/core.py", line 11, in __call__ raise TypeError("Virtual method %s must be called from a subclass." % self.__name__) TypeError: Virtual method my_virtual_method must be called from a subclass.
注释
@virtualmethod与@classmethod和@staticmethod一起工作, 但必须先声明,即:
@virtualmethod @classmethod def my_virtual_class_method(cls): ...
学分
感谢Patrick Hensley的投入, 为了他的Denis Ryzhkovmethod_decorator模块。