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

2024-04-25 08:07:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

class Example(object):

    name = String()
    age = Integer()

    def __init__(self,myname,myage):
        self.name.value = myname
        self.age.value = myage

与其执行self.name.value=name,不如模拟赋值运算符的重载,以便在执行self.name=myname时将myname赋值给self.name.value?


Tags: nameselfagestringobjectinitvalueexample
3条回答

在这种非常特殊的情况下,在属性赋值中,可以使用^{}。实际上,我怀疑在您使用的示例中,IntegerString实际上是描述符。

除了使用预先定义的描述符之外,使用描述符的最简单方法是使用^{}。下面是一个简单的例子:

>>> 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
>>> 

你不能超载作业。不是接线员。您最好在这里只在对象构造函数中构造值。

class Example(object):

    def __init__(self,myname, myage):
        self.name = String(myname)
        self.age = Integer(myage)

不过,在这种情况下,我不明白为什么不能只使用内置的strint

您不能在python中重载赋值运算符,但是使用一些巧妙的magic方法重载,您可以通过重载rshiftmagic方法来获得A<;<;=B+C,有关pythons magic方法的全面指南,请参见this

相关问题 更多 >