izekia
Ноя. 15, 2016 08:40:14
4kpt_IV
FishHook
да, видимо я был неправ, classmethod ближе к обычному статическому методу из ООП за счет неявно передаваемого ему параметра
FishHook
Ноя. 15, 2016 08:46:58
izekia
Тут все несколько сложнее, если разобраться как классметоды устроены. Дело в том, что это вообще не методы, а объекты-дескрипторы.
izekia
Ноя. 15, 2016 08:57:13
FishHook
да,я пока не проникся питоновским ООП с тех пор как вернулся с джаваскрипта, хотя надо сказать и раньше не был его фанатом) … мне иногда проще выразить состояние через замыкание. Буду больше сталкиваться с этим - придет понимание как это может быть задействовано и в чем преимущество.
4kpt_IV
Ноя. 15, 2016 09:58:20
Каноничнее питонячего ООП только у смалталка. Все остальное далеко от идеала. Ну а жаба это вообще костыль на костыле. Жуткая штука. Хотя каждому свое…
izekia
Ноя. 15, 2016 10:27:36
4kpt_IV
да отвык я немного от ооп, а применять его больше всего на шарпе пришлось
но я догоню)
py.user.next
Ноя. 15, 2016 12:04:35
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
>>>
FishHook
Ноя. 15, 2016 12:19:55
При этом у экземпляра одноименный член можно перегрузить
class Foo(object):
@classmethod
def foo(cls):
return 1
def __init__(self):
self.foo = lambda: 2
print Foo.foo()
print Foo().foo()
в этом плане ни методы, ни классметоды ничем не отличаются от членов-переменных.
izekia
Ноя. 15, 2016 13:58:04
добрый фишхук, даже как-то странно)