Якщо я створюю власний клас у 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 = MyClass()
>>> 54 in m
True
Дивіться документацію про перевантаження__contains__
.
Ви також можете ознайомитись із рамкою переопределення оператора інфіксації, яку я зміг використати для створення мови, що залежить від домену:
is
таis not
операторів. Якquery = tinydb.Query().field == value
, щоб також вміти писатиQuery().field is not None
. Але, здається, я залишився__eq__
і__ne__
на даний момент, що призводить до непітонічностіQuery().field != None
. (сарк)