Python QuerySet对象和/或op

2024-06-24 12:24:04 发布

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

我是python新手,在使用djnago查询时发现了一些对象列表,比如

 querysetObj = <QuerySet [<class: obj1>, <class: obj2>]>
 queryset=<QuerySet [<class: obj1>, <class: obj3>,<class:obj4>]>
 for obj in querysetObj:
   queryset|=obj 
 queryset=<QuerySet [<class: obj1>, <class: obj3>,<class:obj4>,<class:obj2]>#it acts like a set compare objects and add none repeated objects only 

我想知道如何对其他对象“我自己的类”进行相同的设计,这是否与c++之类的运算符重载有关?如果是,如何做到这一点?你知道吗


Tags: 对象obj列表forobjectsclassqueryset新手
1条回答
网友
1楼 · 发布于 2024-06-24 12:24:04

您可以通过实现特殊的__or__方法(也可能是__ror__)来实现它,如here所述。你知道吗

class Foo:
    def __or__(self, other):
        return "Orred Foo"
    def __ror__(self, other):
        return "Rorred Foo"

Foo() | Foo()
# => 'Orred Foo'
Foo() | 7
# => 'Orred Foo'
7 | Foo()
# => 'Rorred Foo'

如果左操作数定义了__or__,则调用其__or__方法。如果没有,或者__or__抛出NotImplemented,则调用右操作数的__ror__。你知道吗

其他运算符的实现方式类似,使用各种特殊函数。你知道吗

相关问题 更多 >