在Smalltalk中,有一条消息DoesNotUnderstand
在对象不理解消息时被调用(这是当对象没有发送消息时)。
所以,我想知道在python中是否有一个函数可以做同样的事情。
在这个例子中:
class MyObject:
def __init__(self):
print "MyObject created"
anObject = MyObject() # prints: MyObject created
anObject.DoSomething() # raise an Exception
那么,我可以向MyObject
添加一个方法,以便知道何时有DoSomething
被调用?
PS:抱歉我的英语不好。
答案 0 :(得分:7)
以下是您想要做的事情:
class callee:
def __init__(self, name):
self.name = name
def __call__(self):
print self.name, "has been called"
class A:
def __getattr__(self, attr):
return callee(attr)
a = A()
a.DoSomething()
>>> DoSomething has been called
答案 1 :(得分:3)
答案 2 :(得分:3)
您是否查看了对象。__getattr__(self, name)
或对象。__getattribute__(self, name)
的新式类? (见Special method names, Python language reference)
答案 3 :(得分:2)
我不知道为什么卢克有两个单独的课程。如果使用闭包,可以使用一个类完成所有操作。像这样:
class A(object):
__ignored_attributes__ = set(["__str__"])
def __getattr__(self, name):
if __name__ in self.__ignored_attributes__:
return None
def fn():
print name, "has been called with self =", self
return fn
a = A()
a.DoSomething()
我添加了关于__ignored_attributes__
的内容,因为Python在课堂上查找__str__
并且有点乱。