ถ้าฉันสร้างคลาสของตัวเองใน Python ฉันควรกำหนดฟังก์ชั่นอะไรเพื่อให้สามารถใช้โอเปอเรเตอร์ 'in' ได้เช่น
class MyClass(object):
...
m = MyClass()
if 54 in m:
...
ถ้าฉันสร้างคลาสของตัวเองใน Python ฉันควรกำหนดฟังก์ชั่นอะไรเพื่อให้สามารถใช้โอเปอเรเตอร์ 'in' ได้เช่น
class MyClass(object):
...
m = MyClass()
if 54 in m:
...
คำตอบ:
คำตอบที่สมบูรณ์มากขึ้นคือ:
class MyClass(object):
def __init__(self):
self.numbers = [1,2,3,4,54]
def __contains__(self, key):
return key in self.numbers
ที่นี่คุณจะได้รับจริงเมื่อถามว่า 54 อยู่ใน m:
>>> m = MyClass()
>>> 54 in m
True
ดูเอกสารเกี่ยวกับการบรรทุกเกินพิกัด__contains__
คุณอาจต้องการดูกรอบการแทนที่โอเปอเรเตอร์ของ infix ที่ฉันสามารถใช้เพื่อสร้างภาษาเฉพาะโดเมน:
is
และis not
ตัวดำเนินการ เหมือนจะยังสามารถที่จะเขียนquery = tinydb.Query().field == value
Query().field is not None
แต่ดูเหมือนว่าฉันทิ้งให้อยู่กับ__eq__
และ__ne__
เวลาเป็นอยู่ซึ่งนำไปสู่การQuery().field != None
unpythonic (sarc)