Jython的2.1 __getattr__
题
我试图实现在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
非常感谢!
解决方案
if __client != None:
有关针对如无特定实例的测试,这是惯用的使用恒等算子:
if __client is not None:
这将避免调用比较器的问题。
然而,__getattr__
引发AttributeError
不应该是一个问题的事实。比较推测应该叫getattr
为__cmp__
(__ne__
首先在新的蟒蛇),如果它得到了AttributeError
它应该是默默吞下它,并回落到识别比对来代替。为什么AttributeError
你的情况引起的问题?
不隶属于 StackOverflow