在python中,我可以创建一个Class,在实例化时,可以接收任意方法调用吗?我已阅读this但无法将各个部分放在一起
我想这与attribute lookup
有关。对于课程Foo
:
class Foo(object):
def bar(self, a):
print a
class属性可以通过print Foo.__dict__
获得,它提供
{'__dict__': <attribute '__dict__' of 'Foo' objects>, '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__module__': '__main__', 'bar': <function bar at 0x7facd91dac80>, '__doc__': None}
所以这段代码有效
foo = Foo()
foo.bar("xxx")
如果我致电foo.someRandomMethod()
,则会产生AttributeError: 'Foo' object has no attribute 'someRandomMethod'
。
我希望foo
对象接收任何随机调用,默认为no-op,即。
def func():
pass
我怎样才能做到这一点?我希望这种行为模拟一个对象进行测试。
答案 0 :(得分:5)
来自http://rosettacode.org/wiki/Respond_to_an_unknown_method_call#Python
class Example(object):
def foo(self):
print("this is foo")
def bar(self):
print("this is bar")
def __getattr__(self, name):
def method(*args):
print("tried to handle unknown method " + name)
if args:
print("it had arguments: " + str(args))
return method
example = Example()
example.foo() # prints “this is foo”
example.bar() # prints “this is bar”
example.grill() # prints “tried to handle unknown method grill”
example.ding("dong") # prints “tried to handle unknown method ding”
# prints “it had arguments: ('dong',)”