gpt4 book ai didi

python - 如何在 python 中使用 abstractproperty 装饰器强制子类设置属性?

转载 作者:太空狗 更新时间:2023-10-29 22:25:02 25 4
gpt4 key购买 nike

我想强制一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com