__getattr__
当没有属性时被触发,hession-py使用__getattr__来发送命令。
但如果属性存在就不会触发此方法,比如o.photo。这时候可以通过__getattribute__来实现:
全部代码:
参考:
http://docs.python.org/reference/datamodel.html
http://stackoverflow.com/questions/371753/python-using-getattribute-method
http://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute-in-python
当没有属性时被触发,hession-py使用__getattr__来发送命令。
class Obj(object):
photo = "hello"
def __getattr__(self, name):
print name
return _Method(self.__invoke, name)
def __invoke(self, method, params):
print 'invoke'
class _Method:
def __init__(self, invoker, method):
self._invoker = invoker
self._method = method
def __call__(self, *args):
return self._invoker(self._method, args)
o = Obj()
o.hello
o.hello()
但如果属性存在就不会触发此方法,比如o.photo。这时候可以通过__getattribute__来实现:
class Obj(object):
photo = "hello"
def __getattribute__(self, name):
print '1'+name
#return _Method(self.__invoke, name)
return object.__getattribute__(self, name)
def __invoke(self, method, params):
print 'invoke'
class _Method:
def __init__(self, invoker, method):
self._invoker = invoker
self._method = method
def __call__(self, *args):
return self._invoker(self._method, args)
o = Obj()
o.photo
全部代码:
class Obj(object):
photo = "hello"
def __getattribute__(self, name):
print '1'+name
#return _Method(self.__invoke, name)
return object.__getattribute__(self, name)
def __getattr__(self, name):
print '2'+name
return _Method(self.__invoke, name)
def __invoke(self, method, params):
print 'invoke'
class _Method:
def __init__(self, invoker, method):
self._invoker = invoker
self._method = method
def __call__(self, *args):
return self._invoker(self._method, args)
o = Obj()
print o.photo
参考:
http://docs.python.org/reference/datamodel.html
http://stackoverflow.com/questions/371753/python-using-getattribute-method
http://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute-in-python