【发布时间】:2014-03-04 03:30:04
【问题描述】:
我试图在一个类中使用属性和装饰器,但我一直遇到的问题是获取正确的参数和参数的数量。
class Xml(object):
def __init__(self, data_dictionary=None):
self.data_dictionary = data_dictionary
def xml_wrapper(xml_msg):
def wrap():
return '<?xml version="1.0" encoding="UTF-8"?>\n'+xml_msg['name']
return wrap
@property
@xml_wrapper
def data_dictionary(self):
return self._data_dictionary
@data_dictionary.setter
def data_dictionary(self, data):
self._data_dictionary = data
if __name__ == '__main__':
xml = Xml()
xml.data_dictionary = {'name': 'name 1'}
print xml.data_dictionary
我得到的错误是
print xml.data_dictionary
TypeError: wrap() takes no arguments (1 given)
我不知道为什么,我尝试将 self 添加到 xml_wrapper 函数中,但仍然出现错误。
【问题讨论】:
-
data_dictionary被xml_wrapper装饰器包装,它返回一个不带任何参数的函数(wrap);但是当您调用xml.data_dictionary时,正在传递隐式参数xml(self)。
标签: python class properties decorator