Форум сайта python.su
12
4kpt_IV
FishHook
да, видимо я был неправ, classmethod ближе к обычному статическому методу из ООП за счет неявно передаваемого ему параметра
Офлайн
568
izekia
Тут все несколько сложнее, если разобраться как классметоды устроены. Дело в том, что это вообще не методы, а объекты-дескрипторы.
Офлайн
12
FishHook
да,я пока не проникся питоновским ООП с тех пор как вернулся с джаваскрипта, хотя надо сказать и раньше не был его фанатом) … мне иногда проще выразить состояние через замыкание. Буду больше сталкиваться с этим - придет понимание как это может быть задействовано и в чем преимущество.
Офлайн
49
Каноничнее питонячего ООП только у смалталка. Все остальное далеко от идеала. Ну а жаба это вообще костыль на костыле. Жуткая штука. Хотя каждому свое…
Офлайн
12
4kpt_IV
да отвык я немного от ооп, а применять его больше всего на шарпе пришлось
но я догоню)
Офлайн
857
ilnazОбычно методы класса работают с экземпляром этого класса. Когда создаётся экземпляр класса, у него есть методы, которые с ним же и работают (хранят что-то в нём или читают что-то из него). А статические методы класса - это методы которым не нужен экземпляр класса. Он может быть вызван как у класса напрямую (без создания экземпляра), так и у экземпляра без его использования. При этом в экземпляре он только хранится, но не работает с ним.
Можете объяснить назначение статических методов
>>> class A: ... ... x = 1 ... ... def getx(self): ... return self.x ... ... @staticmethod ... def sum(a, b): ... return a + b ... >>> a = A() >>> >>> a.getx() 1 >>> >>> A.sum(2, 3) 5 >>> a.sum(3, 4) 7 >>>
Отредактировано py.user.next (Ноя. 15, 2016 12:06:07)
Офлайн
568
При этом у экземпляра одноименный член можно перегрузить
class Foo(object): @classmethod def foo(cls): return 1 def __init__(self): self.foo = lambda: 2 print Foo.foo() print Foo().foo()
Офлайн
12
добрый фишхук, даже как-то странно)
Офлайн