gpt4 book ai didi

python - Python中的抽象方法

转载 作者:IT老高 更新时间:2023-10-28 20:44:31 27 4
gpt4 key购买 nike

我需要类似 Python (3.2) 中的 abstract protected 方法:

class Abstract:
def use_concrete_implementation(self):
print(self._concrete_method())

def _concrete_method(self):
raise NotImplementedError()


class Concrete(Abstract):
def _concrete_method(self):
return 2 * 3

定义一个“抽象”方法只是为了引发 NotImplementedError 真的有用吗?

对抽象方法使用下划线是否是一种好的风格,在其他语言中会受到protected的影响?

抽象基类 (abc) 会改进什么吗?

最佳答案

在 Python 中,您通常会避免同时使用这些抽象方法。您通过文档定义一个接口(interface),并简单地假设传入的对象满足该接口(interface)(“鸭子类型”)。

如果你真的想用抽象方法定义一个抽象基类,这可以使用 abc 来完成。模块:

from abc import ABCMeta, abstractmethod

class Abstract(metaclass=ABCMeta):
def use_concrete_implementation(self):
print(self._concrete_method())

@abstractmethod
def _concrete_method(self):
pass

class Concrete(Abstract):
def _concrete_method(self):
return 2 * 3

同样,这不是 Python 的常用方式。 abc 模块的主要目标之一是引入一种重载 isinstance() 的机制,但通常会避免 isinstance() 检查鸭子打字的青睐。如果需要,请使用它,但不要作为定义接口(interface)的通用模式。

关于python - Python中的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856963/

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