utt*_*tep 16 python oop methods inheritance overriding
我有一个"抽象"类,例如:
class A:
def do_some_cool_stuff():
''' To override '''
pass
def do_some_boring_stuff():
return 2 + 2
Run Code Online (Sandbox Code Playgroud)
和B类,子类A:
class B(A):
def do_stuff()
return 4
Run Code Online (Sandbox Code Playgroud)
是否有任何方法可以声明,一个方法A.do_some_cool_stuff 必须被覆盖,并且可能在尝试创建B类对象时应该引发一些警告,当B没有实现时A.do_some_cool_stuff?
Mar*_*ers 37
是的,通过定义A为ABC(抽象基类):
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
Run Code Online (Sandbox Code Playgroud)
您可以继承子类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
Run Code Online (Sandbox Code Playgroud)