【发布时间】:2013-01-09 20:27:57
【问题描述】:
为什么会这样?
class IsInstanceScrewer(object):
def __init__(self, value):
self.value = value
def __getattribute__(self, name):
if name in ('value',):
return object.__getattribute__(self, name)
value = object.__getattribute__(self, 'value')
return object.__getattribute__(value, name)
isinstance(IsInstanceScrewer(False), bool) #True
isinstance(IsInstanceScrewer([1, 2, 3]), list) #True
该类绝对不是 bool 的实例,即使它试图包装它。
【问题讨论】:
-
请注意,您需要将
('value')更改为('value',)(带逗号),否则您还没有创建元组,如果name是“的子字符串,if name in ('value')将为真价值”。 -
@BrenBarn:很好的收获。在我最初的示例中,我曾经有更多的项目,但减少了它们以使其更简单,同时引入了一个错误
标签: python class inheritance getattribute new-style-class