【发布时间】:2016-09-17 16:01:37
【问题描述】:
我对 python 2.7 有一个简单的疑问:
我已经创建了一个抽象基类和一个子类:
from abc import ABCMeta, abstractmethod
class Base:
"""
Abstract base class for all entities.
"""
__metaclass__ = ABCMeta
def __init__(self, name):
self.name = name
def send_data(self):
self.send_data()
class Child (Base):
def __init__(self, name):
super(Child, self).__init__(name=name)
当创建子类的对象并调用 send_method 时,我收到以下错误,这是预期的行为:
sample = Child('test')
sample.send_data()
# …
RuntimeError: maximum recursion depth exceeded
但是当 send_method 引用在基类中传递并通过创建子类对象调用 send_method 时,我认为预期的行为是接收AttributeError,但我很惊讶地发现没有生成错误。请解释一下。
from abc import ABCMeta, abstractmethod
class Base:
"""
Abstract base class for all entities.
"""
__metaclass__ = ABCMeta
def __init__(self, name, parent):
self.name = name
self.parent = parent
def send_data(self):
self.send_data
sample = Child('test')
sample.send_data()
# No error
【问题讨论】:
-
我不确定您为什么会收到属性错误。你有一个属性
send_data;Base.send_data方法是一个属性。
标签: python abstract-base-class