Sobes.tech
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