当前位置: 首页 > 面试题库 >

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

施令秋
2023-03-14
问题内容

如何在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?


问题答案:

我最终创建了一个名为ModelMeta的Model元类,该元类注册了类型化的属性。

参见http://github.com/espeed/bulbs/blob/master/bulbs/model.py

在这种情况下,类型化的属性是图形数据库“属性”,它们都是Property类的所有子类。

参见https://github.com/espeed/bulbs/blob/master/bulbs/property.py

这是一个示例模型声明:

# people.py

from bulbs.model import Node, Relationship
from bulbs.property import String, Integer, DateTime
from bulbs.utils import current_datetime

class Person(Node):

    element_type = "person"

    name = String(nullable=False)
    age = Integer()


class Knows(Relationship):

    label = "knows"

    created = DateTime(default=current_datetime, nullable=False)

用法示例:

>>> from people import Person
>>> from bulbs.neo4jserver import Graph
>>> g = Graph()

# Add a "people" proxy to the Graph object for the Person model:
>>> g.add_proxy("people", Person)

# Use it to create a Person node, which also saves it in the database:
>>> james = g.people.create(name="James")
>>> james.eid
3
>>> james.name
'James'

# Get the node (again) from the database by its element ID:
>>> james = g.people.get(james.eid)

# Update the node and save it in the database:
>>> james.age = 34
>>> james.save()

# Lookup people using the Person model's primary index:
>>> nodes = g.people.index.lookup(name="James")

看到…

  • 灯泡模型API:http://bulbflow.com/docs/api/bulbs/model/
  • 灯泡模型快速入门:http://bulbflow.com/quickstart/#models


 类似资料:
  • 主要内容:基本赋值运算符,扩展后的赋值运算符赋值运算符用来把右侧的值传递给左侧的变量(或者常量);可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除、函数调用、逻辑运算等。 Python 中最基本的赋值运算符是等号 ;结合其它运算符, 还能扩展出更强大的赋值运算符。 基本赋值运算符 是 Python 中最常见、最基本的赋值运算符,用来将一个表达式的值赋给另一个变量,请看下面的例子: 连续赋值 Python

  • 问题内容: 我想为CGFloat覆盖’=’运算符,例如下面的try: 因此,我可以执行以下操作: 能做到吗?我得到错误 问题答案: 这是不可能的-如文档中所述: 无法重载默认赋值运算符(=)。仅复合赋值运算符可以重载。同样,三元条件运算符(a?b:c)不能重载。 如果那不能说服您,只需将运算符更改为: 并且您会注意到您将不再遇到编译错误。 产生误导性错误消息的原因可能是因为编译器将您试图重载的尝试

  • 在《 到底什么时候会调用拷贝构造函数?》一节中,我们讲解了初始化和赋值的区别:在定义的同时进行赋值叫做 初始化(Initialization),定义完成以后再赋值(不管在定义的时候有没有赋值)就叫做 赋值(Assignment)。初始化只能有一次,赋值可以有多次。 当以拷贝的方式初始化一个对象时,会调用拷贝构造函数;当给一个对象赋值时,会调用重载过的赋值运算符。 即使我们没有显式的重载赋值运算符,

  • C++ 重载运算符和重载函数 就像其他运算符一样,您可以重载赋值运算符( = ),用于创建一个对象,比如拷贝构造函数。 下面的实例演示了如何重载赋值运算符。#include <iostream> using namespace std; class Distance { private: int feet; // 0 到无穷 int inches; // 0 到 12 public: // 所需的

  • 我知道Java不支持运算符重载,但我看到您可以为Integer对象赋值,例如,使用运算符,而不是使用setter。 所以我想知道是否有可能将这种行为实现到任何类?

  • 本文向大家介绍整理Python中的赋值运算符,包括了整理Python中的赋值运算符的使用技巧和注意事项,需要的朋友参考一下 下表列出了所有Python语言支持的赋值运算符。假设变量a持有10和变量b持有20,则:  例如: 试试下面的例子就明白了所有在Python编程语言可供选择的赋值运算符: 当执行上面的程序,它会产生以下结果: