__contains__
jest poprawna dla in
, z opcjami fall-back jeśli __contains__
nie jest zdefiniowany jako __iter__
i __getitem__
.
Nie jestem do końca pewien, dlaczego należy użyć getattr
dla is
jednak; is
jest "zdefiniowany" dla obiektu co każdy obiekt w języku Python. Nie ma potrzeby przechodzenia przez operator._is
lub (próbowanie i niepowodzenie) przez getattr
.
See the documentation on built-in types:
Zachowanie is
i is not
operatorów nie można dostosować; także mogą być stosowane do dowolnych dwóch obiektów i nigdy nie wywołują wyjątku.
(Kopalnia nacisk)
Według fragmentów podanych przez Ciebie, który właśnie złapał funkcję i wywołać ją przy użyciu getattr(a, "function")(b)
, masz już nazwy obiektów, które trzeba ocenić, wystarczy użyć is
natychmiast; jest zawsze dostępny.
Dlaczego moduł 'operator' miałby być lepszy od zwykłego sposobu? –
Nie będzie, ale jeśli potrzebujesz wersji funkcjonalnych operatorów, moduł operatorski jest lepszy niż dostęp do metod dunderów lub pisanie własnych owijaczy. –
Przeczytałem 'getattr (a, '__lt __') (b)' jako pytanie o wersję funkcji 'a