【发布时间】:2017-01-17 11:24:18
【问题描述】:
我想强制一个子类设置几个属性(实例变量),以实现我在 python 2.7 中使用抽象属性装饰器。下面是示例代码:
from abc import ABCMeta, abstractproperty
class Parent(object):
__metaclass__ = ABCMeta
@abstractproperty
def name(self):
pass
class Child1(Parent):
pass
class Child2(Parent):
name = 'test'
class Child3(Parent):
def __init__(self):
self.name = 'test'
obj_child1 = Child1()
Child1 对象创建按预期给出错误。
obj_child2 = Child2()
Child2 对象创建工作正常,因为设置了抽象属性“名称”
然而
obj_child3 = Child3()
给出TypeError: Can't instantiate abstract class Child3 with abstract methods name
我不明白:虽然属性'name'是在init中设置的 方法,为什么创建 Child3 对象会抛出类型错误。
我的要求是在子类的方法中设置属性。解释 child2 类有什么问题以及是否有更好的方法来强制子类在方法中设置属性将对我有所帮助。提前致谢。
【问题讨论】:
-
你的标题是什么意思?你的意思是说,“我不明白……”?
-
我认为问题标题现在更有意义@Tagc
标签: python python-2.7 abstract-class