gpt4 book ai didi

python - 在 Python 中是否可以声明必须重写该方法?

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

我有一个“抽象”类,例如:

class A:
def do_some_cool_stuff():
''' To override '''
pass

def do_some_boring_stuff():
return 2 + 2

B 类,A 类的子类:

class B(A):
def do_stuff()
return 4

有什么方法可以声明A.do_some_cool_stuff必须方法被重写,并且可能在尝试创建 B 类时应该发出一些警告对象,当 B 还没有实现 A.do_some_cool_stuff 时?

最佳答案

是的,通过将 A 定义为 ABC (Abstract Base Class) :

from abc import ABCMeta, abstractmethod

class A(object):
__metaclass__ = ABCMeta

@abstractmethod
def do_some_cool_stuff():
''' To override '''
pass

def do_some_boring_stuff():
return 2 + 2

您可以子类化 A,但是如果 do_some_cool_stuff() 方法具有具体实现,您只能创建此类子类的实例:

>>> from abc import ABCMeta, abstractmethod
>>> class A(object):
... __metaclass__ = ABCMeta
... @abstractmethod
... def do_some_cool_stuff():
... ''' To override '''
... pass
... def do_some_boring_stuff():
... return 2 + 2
...
>>> class B(A):
... def do_stuff():
... return 4
...
>>> B()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class B with abstract methods do_some_cool_stuff

关于python - 在 Python 中是否可以声明必须重写该方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402622/

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