擅长:python、mysql、java
<p>您需要在decorator类的call方法返回的<em>包装器</em>函数上设置属性:</p>
<pre><code>class DataMember():
def __init__(self, **args):
self.default = {"required" : False , "type" : "string" , "length": -1}
self.default.update(args)
def __call__(self , func):
#Here I want to set the attribute to method
def validate(obj , value):
#some other code
func(obj , value)
setattr(validate , "__dbattr__" , self.default)
return validate
class DbObject: pass
class User(DbObject):
def __init__(self):
super(User , self)
self._username = None
@property
def Name(self):
return self._username
@Name.setter
@DataMember(length=100)
def Name(self , value):
self._username = value
</code></pre>
<p>但是请注意,它不是一个方法,因为类上有一个属性,它的实例只会返回一个字符串,即getter返回的字符串。要访问setter,必须通过类上的属性间接地执行此操作:</p>
^{pr2}$
<p>哪个打印:</p>
<pre><code>usernameofapp
{'required': False, 'type': 'string', 'length': 100}
</code></pre>