如何在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 ?
How can you emulate assignment operator overloading in Python? For example...
class Example(object):
name = String()
age = Integer()
def __init__(self,myname,myage):
self.name.value = myname
self.age.value = myage
Rather than doing self.name.value = name, how can you emulate overloading of the assignment operator so that myname is assigned to self.name.value when you do self.name = myname?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
在这种非常特殊的情况下,在属性分配中,您可以使用
descriptor< /代码>
。事实上,我怀疑在您使用的示例中,
Integer
和String
实际上是描述符。除了使用预制描述符之外,使用描述符的最简单方法是使用
property()< /代码>
。这是一个简短的例子:
In this very special case, in attribute assignment, you can use a
descriptor
. In fact, I suspect that in the example you are using,Integer
andString
are actually descriptors.Aside from using premade descriptors, the easiest way to use descriptors is with
property()
. here's a brief example:你不能在 python 中重载赋值运算符,但是通过一些巧妙的魔术方法重载,你可以通过重载 rshift 魔术方法来获得 A <<= B+C,这是有关 python 魔术的综合指南方法请参阅此。
You cannot overload the assignment operator in python however with some clever overloading of magic methods you can get to A <<= B+C by overloading the rshift magic method, for a comprehensive guide on pythons magic methods see this.
您不能超载分配。这不是运营商。您最好只在对象构造函数中构造值。
但是在这种情况下,我不明白为什么不能只使用内置的
str
和int
。You can't overload assignment. It's not an operator. You would be better off here just constructing the value in the object constructor.
However in this case I don't see why you can't just use the built-in
str
andint
.我最终创建了一个名为 ModelMeta 的模型元类,用于注册类型化属性。
请参阅http://github.com/espeed/bulbs/blob/master/ 在这种情况下,类型化属性是图形数据库“属性” ,
它们都是 Property 类的子类。
请参阅 https://github.com/espeed/bulbs/blob/master/ bulbs/property.py
这是一个示例模型声明:
示例用法:
请参阅...
I ended up creating a Model metaclass called ModelMeta that registers the typed attributes.
See http://github.com/espeed/bulbs/blob/master/bulbs/model.py
In this case, the typed attributes are graph-database "properties", which are all subclasses of the Property class.
See https://github.com/espeed/bulbs/blob/master/bulbs/property.py
Here's an example Model declaration:
Example usage:
See...