【发布时间】:2018-08-13 14:07:43
【问题描述】:
我想创建一个抽象类,如果子类没有实现抽象属性,子类在实例化时会引发错误。如果属性是方法而不是属性,也应该引发错误。我的尝试:
from abc import ABC, abstractmethod
class IClass(ABC):
@property
@abstractmethod
def attr(self):
pass
不幸的是,这并不能阻止使用attr 方法而不是属性来实例化子类。
该解决方案应产生以下结果:
class C(IClass):
pass
C() # Must fail because 'attr' has not been implemented
class C(IClass):
def attr(self):
pass
C().attr # Must fail because attribute 'attr' is a method rather than a property
class C(IClass):
attr = 'attr'
C().attr # Must pass because 'attr' is a property
手册:docs。
【问题讨论】:
-
attr = 'attr'不创建属性。 -
也许考虑只创建一个抽象方法
attr.getter。
标签: python python-3.x abstract-class abc