__cmp__ yerine __lt__

| | | | | | |

Python 2.x, karşılaştırma operatörlerini aşırı yüklemenin iki yoluna sahiptir, __cmp__ veya __lt__. Zengin karşılaştırma aşırı yüklemelerinin tercih edildiği söyleniyor, ancak bu neden böyle?

Zengin karşılaştırma operatörlerinin her birini uygulamak daha kolaydır, ancak bunlardan birkaçını neredeyse aynı mantıkla uygulamanız gerekir. . Ancak, yerleşik cmp ve grup sıralamasını kullanabiliyorsanız, o zaman __cmp__ oldukça basitleşir ve tüm karşılaştırmaları yerine getirir:

class A (nesne): def __init__(self, name, age, other): self.name = name self.age = age self.other = other def __cmp__(self, other): assert isinstance(other, A) # bunun için varsayım örnek return cmp((self.name, self.age, self.other), (other.name, other.age, other.other)) 

Bu basitlik benim ihtiyaçlarımı karşılıyor gibi görünüyor tüm 6(!) zengin karşılaştırmayı aşırı yüklemekten çok daha iyi. (Ancak, "değiştirilmiş argüman"/yansıtılmış davranışa güveniyorsanız, bunu "sadece" 4'e düşürebilirsiniz, ancak bu, benim naçizane görüşüme göre net bir komplikasyon artışına neden olur.)

< Strong>Yalnızca __cmp__'u aşırı yüklersem dikkat etmem gereken öngörülemeyen tuzaklar var mı?

<'u anlıyorum , <=, == vb. operatörler başka amaçlar için aşırı yüklenebilir ve istedikleri herhangi bir nesneyi döndürebilir. Bu yaklaşımın yararları hakkında değil, yalnızca bu operatörleri sayılar için ifade ettikleri anlamda karşılaştırmalar için kullanma farklılıkları hakkında soruyorum.

Güncelleme: Christopher belirtildi, cmp kayboluyor 3.x'te Karşılaştırmaların uygulanmasını yukarıdaki __cmp__ kadar kolaylaştıran alternatifler var mı?

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method