【发布时间】:2016-02-08 10:57:36
【问题描述】:
我想用定义和abstract method 定义一个命名元组和一个基类的混合:
import abc
import collections
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def do(self):
print("U Can't Touch This")
B = collections.namedtuple('B', 'x, y')
class C(B, A):
pass
c = C(x=3, y=4)
print(c)
c.do()
据我了解阅读文档和other examples I have seen,c.do() 应该会引发错误,因为 C 类没有实现do()。但是,当我运行它时......它可以工作:
B(x=3, y=4)
U Can't Touch This
我一定是忽略了什么。
【问题讨论】:
-
你用的是什么版本的python?在 python 2 和 python 3 中,元类以不同的、不兼容的方式被调用。如果你使用的是 python 3,那么你的类实际上并不是一个抽象类。
-
我在 Python 2 和 3 上都试过了。同样的行为。
标签: python