为Python类变量定义__getattr__和__setattr__

时间:2013-01-22 12:19:15

标签: python class setter

  

可能重复:
  Does python has methods similar to __setattr__ but for python class?

我正在尝试创建自己的表单框架,其中表单可以像这样定义:

class LoginForm(forms.Form):
    username = forms.Input(type='text',validators=[validators.Required(),validators.len(3,10)])
    pass‹ord = forms.Input(type='password', validators=[validators.Required(),validators.len(min=8)])

这些Input实例也有一个属性name,但是如果必须在构造函数中作为参数传递它会显得很愚蠢,因为你已经用变量名称命名了它。所以我在repl中做了一个非常简单的测试:

class Base:
    @classmethod
    def __setattr__(cls, key, value):
        cls.__dict__[key] = value
        cls.__dict__[key].name = key

class PropClass:
    pass

class SubClass(Base):
    x = PropClass()

SubClass().x.name

我希望这会返回“x”,但事实并非如此。

现在,我已经在Form构造函数中放了一些代码来迭代它的 dict ,检查Field实例,并设置它们的名称,这对我来说同样适用,但我是仍然很古怪,可以为类变量定义setter。

0 个答案:

没有答案