我正在尝试在jython v2.1中为java对象(baseClient)实现一个包装器/代理类。除非遇到以下语句,否则一切似乎都正常工作:
if __client != None # __client is an instance of the ClientProxy class
raise AttributeError(attr)
中调用了 __getattr__()
,因为self.__baseClient
没有__ne__
属性。
重要的是要提到我无法升级因为jython是系统的一部分。有没有办法解决这个问题?
class ClientProxy:
def __init__(self, baseClient):
self.__baseClient = baseClient
self.__initialised = 1
def __getattr__(self, attr):
if not self.__dict__.has_key('_ClientProxy__initialised'):
raise AttributeError(attr)
else:
if hasattr(self.__baseClient, attr):
return getattr(self.__baseClient, attr)
else:
raise AttributeError(attr)
def __setattr__(self, attr, val):
if not self.__dict__.has_key('_ClientProxy__initialised'):
self.__dict__[attr] = val
return
if hasattr(self.__baseClient, attr):
self.__baseClient.__setattr__(attr, val)
else:
self.__dict__[attr] = val
非常感谢!
答案 0 :(得分:0)
if __client != None:
对于特定实例(如None)的测试,使用身份运算符是惯用的:
if __client is not None:
这将避免调用比较器的问题。
但是,__getattr__
引发AttributeError
这一事实应该不成问题。比较器应推测getattr
推测__cmp__
(__ne__
首先在新的Pythons上),如果得到AttributeError
,它应该默默地吞下它并回归到身份比较而不是。为什么AttributeError
导致您的案件出现问题?