Man*_*áoz 10 python design-patterns coding-style exception
假设我想在python中创建一个抽象类,其中一些方法由子类实现.(在Python中)
例如:
class Base():
def f(self):
print "Hello."
self.g()
print "Bye!"
class A(Base):
def g(self):
print "I am A"
class B(Base):
def g(self):
print "I am B"
Run Code Online (Sandbox Code Playgroud)
我希望如果基类被实例化并调用其f()方法,当调用g()时,会引发异常,通知子类应该实现方法g().
这里常见的事情是什么?我应该引发NotImplementedError吗?或者有更具体的方法吗?
非常感谢!
曼努埃尔
Ale*_*lli 13
在Python 2.6及更高版本中,您可以使用abc模块创建Base"实际"抽象基类:
import abc
class Base:
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def g(self):
pass
def f(self): # &c
Run Code Online (Sandbox Code Playgroud)
这保证了Base无法实例化 - 并且任何子类都不能覆盖g- 同时满足@Aaron允许子类super在其g实现中使用的目标.总的来说,这是一个比我们以前在Python 2.5及更早版本中提供的更好的解决方案!
附注:从对象继承Base将是多余的,因为无论如何都需要显式设置元类.
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |