【发布时间】:2019-02-01 03:48:12
【问题描述】:
请考虑下面的代码
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
setattr(func , "__dbattr__" , self.default)
def validate(obj , value):
#some other code
func(obj , value)
return validate
这是我装饰其他类属性的setter方法的装饰器方法,我想为该方法设置一些属性。但它不允许我。
我尝试如下
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
u = User()
u.Name = "usernameofapp"
print(u.Name)
print(u.Name.__dbattr__)
运行时出现以下错误
Traceback (most recent call last):
File "datatypevalidator.py", line 41, in <module>
print(u.Name.__dbattr__)
AttributeError: 'str' object has no attribute '__dbattr__'
我做错了什么,如何为setter方法设置一些属性。
【问题讨论】:
-
@LevZakharov,User类中会有更多的属性,可以有不同的DataMember装饰器参数,那么我将如何分别访问每个属性的属性,请解释一下,我的python有点低
-
您能否删除对
DbObject的依赖,以便实际运行该示例?
标签: python python-3.x python-2.7 python-decorators python-object