gpt4 book ai didi

Python abc.abstractproperty 兼容性

转载 作者:行者123 更新时间:2023-12-03 17:31:01 27 4
gpt4 key购买 nike

Python 3 文档提到 abc.abstractproperty自 3.3 起已弃用,支持 @property@abstractmethod .是否有另一种方法来实现与 Python 2 和 3 兼容的抽象属性(没有 abc.abstractproperty )?

我试过

import abc
from future.utils import with_metaclass

class Base(with_metaclass(abc.ABCMeta, object)):
@property
@abc.abstractmethod
def x(self):
raise NotImplementedError

class C(Base):
pass

C()

正确引发 TypeError: Can't instantiate abstract class C with abstract methods x在 Python 3 中,但不在 Python 2 中。

最佳答案

我知道这需要您导入 ABC,但您为什么不使用 try except 。

import abc
try:
ABC = abc.ABC
abstractproperty = lambda f: property(abc.abstractmethod(f))
except AttributeError: # Python 2.7, abc exists, but not ABC
ABC = abc.ABCMeta("ABC", (object,), {"__slots__": ()})
from abc import abstractproperty

我在问题的评论中从@Giacomo Alzetta 借用了 python3 解决方案。

关于Python abc.abstractproperty 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54108424/

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