Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 April 06

E

Egor in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Ну да, договоренности
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
условлено что первый объект это экземпляр класса
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo']

и у него вот эта есть куча методов
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
когда же мы используем декоратор classmethod - передается self.__class__
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
class Foo:
   @classmethod
   def foo(selfic):
       print(dir(selfic))

Foo().foo()

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo']

пока вроде то же самое
источник

E

Egor in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Чтобы выжить в питоне, обязательно так углубляться?
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
class Foo:
   def foo2(self):
       print(dir(self))
   @classmethod
   def foo(cls):
       cls.foo2()

Foo().foo()
Foo().foo2()

это выдаст ошибку
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Egor
Чтобы выжить в питоне, обязательно так углубляться?
ну как сказать
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
смотря какие цели
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
по мне так это просто интересно
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
ну и практическая польза в том что более глубоко будешь понимать как работает питон - например как в питоне реализовать перегрузку операторов сложения, например?
источник

E

Egor in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Согласен, просто я осознал, как мало и поверхностно я знаю питон
источник

E

Egor in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
С другой стороны, хорошо, что мне есть, куда развиваться
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
конечно
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
вот как раз перегрузка и вообще изменение поведения в питоне реализуется через переопределение этих вот функций
которые объекты наследуют от базового типа
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
например если переопределить в классе этот метод - при вызове len(x) будет вызван этот метод
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
import random
class Foo:
   def __len__(self):
       return random.randint(0, 1000)
   def __add__(self, other):
       return 5
x = Foo()
print(len(x))
print(x + 5)
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
вот например легко переопределили сложение - что бы мы ни прибавляли - результат будет 5, а len рандомным
источник

m

mr.slavik in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
советую начать с этого поиграться)
источник