Middle
Классҳои кӯҳна ва нав (old-style ва new-style) чистанд ва дар чӣ фарқ доранд?
sobes.tech AI
Ҷавоб аз AI
Пайтони 3-гача, барча синфҳо ескі услубда буд. Дар Python 2, синфҳои нав бо мерос аз object сохта мешуданд.
Асосӣ фарқиятҳо:
- Мерос:
- Услуби кӯҳна: Методи классикии ҳал кардани методҳоро истифода мебарад (Classic Method Resolution Order - CMRO).
- Услуби нав: C3-ро истифода мебарад (линейкунии графи мерос).
- Дескрипторҳо:
- Услуби кӯҳна: Дескрипторҳоро истифода намебарад (аз ҷумла
__slots__,property). - Услуби нав: Пурра дастгирӣ мекунад дескрипторҳоро.
- Услуби кӯҳна: Дескрипторҳоро истифода намебарад (аз ҷумла
- MRO барои мероси бисёргум:
- Услуби кӯҳна: Мушкилотро ба вуҷуд меоварад.
- Услуби нав: Саҳеҳ ва пешгӯишаванда аст.
- Атрибутҳо
__class__ва__dict__:- Услуби кӯҳна: Ҳаводис фарқ мекунад.
- Услуби нав: Бештар муттасил.
Масалан, синфи нав дар Python 2 (барои намоиш):
# Танҳо Python 2
class NewStyleClass(object):
pass
class OldStyleClass:
pass
Дар Python 3, ҳама синфҳо ба таври пешфарз нав мебошанд.
# Python 3
class AnyClass: # Автоматӣ аз `object` мерос мегирад
pass