如何在Python中模拟赋值运算符重载?

esp*_*eed 3 python operator-overloading

如何在Python中模拟赋值运算符重载?例如...

class Example(object):

    name = String()
    age = Integer()

    def __init__(self,myname,myage):
        self.name.value = myname
        self.age.value = myage
Run Code Online (Sandbox Code Playgroud)

而不是做self.name.value = name,你如何模拟赋值运算符的重载,以便当你执行self.name = myname时,myname被赋值给self.name.value?

Sin*_*ion 13

在这种非常特殊的情况下,在属性赋值中,您可以使用a descriptor.事实上,我怀疑在这个例子中,你正在使用,IntegerString实际上是描述符.

除了使用预制描述符之外,使用描述符的最简单方法是使用property().这是一个简短的例子:

>>> class Foo(object):
        @property
        def bar(self):
            print 'bar'
            return 'bar'
        @bar.setter
        def bar(self, value):
            print 'bar =', value


>>> afoo = Foo()
>>> afoo.bar
bar
'bar'
>>> afoo.bar = 'baz'
bar = baz
>>> 
Run Code Online (Sandbox Code Playgroud)