Если я создаю свой собственный класс в 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
Здесь вы получите True, если спросите, было ли 54 в m:
>>> m = MyClass()
>>> 54 in m
True
См. документацию по перегрузке __contains__
.
Вы также можете взглянуть на структуру переопределения инфиксных операторов, которую я смог использовать для создания предметно-ориентированного языка:
http://code.activestate.com/recipes/384122/
is
иis not
. Какquery = tinydb.Query().field == value
, чтобы также иметь возможность писатьQuery().field is not None
. Но, похоже, пока что у меня остались__eq__
и__ne__
, что приводит к непифоническомуQuery().field != None
. (сарк) - person Tomasz Gandor   schedule 13.06.2017