我想强制一个 Child 类设置几个属性(实例变量),以实现我在 python 2.7 中使用 abstractproperty 装饰器。这是示例代码:
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
没看懂:虽然在init中设置了'name'属性 方法,为什么创建 Child3 对象会抛出类型错误。
我的要求是在子类的方法中设置属性。解释 child2 类有什么问题,以及是否有更好的方法强制子类在方法中设置属性将对我有所帮助。提前致谢。
最佳答案
一个更简单的解决方案是
class Parent(object):
name = None
def __init__(self):
if self.name == None:
raise NotImplementedError('Subclasses must define bar')
class Child1(Parent):
pass
class Child2(Parent):
name = 'test'
class Child3(Parent):
def __init__(self)
self.name = 'test'
obj1 = Child1()
引发 NotImplementedError
obj2 = Child2()
工作正常
obj3 = Child3()
工作正常。这就是您需要强制子类设置属性 name
并通过方法设置属性。
关于python - 如何在 python 中使用 abstractproperty 装饰器强制子类设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695875/