作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试使用具有默认行为的构造函数声明一个抽象类 A
:所有子类都必须初始化一个成员 self.n
:
from abc import ABCMeta
class A(object):
__metaclass__ = ABCMeta
def __init__(self, n):
self.n = n
但是,我不想让 A
类被实例化,因为它是一个抽象类。问题是,这实际上是允许的:
a = A(3)
这不会产生任何错误,而我希望它应该如此。
那么:如何在为构造函数定义默认行为的同时定义不可实例化的抽象类?
最佳答案
使 __init__
成为抽象方法:
from abc import ABCMeta, abstractmethod
class A(object):
__metaclass__ = ABCMeta
@abstractmethod
def __init__(self, n):
self.n = n
if __name__ == '__main__':
a = A(3)
帮助:
TypeError: Can't instantiate abstract class A with abstract methods __init__
Python 3 版本:
from abc import ABCMeta, abstractmethod
class A(object, metaclass=ABCMeta):
@abstractmethod
def __init__(self, n):
self.n = n
if __name__ == '__main__':
a = A(3)
同样有效:
TypeError: Can't instantiate abstract class A with abstract methods __init__
关于python - 如何在 Python 中为抽象类定义构造函数实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44800659/
我是一名优秀的程序员,十分优秀!