Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2018 12:47:18

fshshsh
Зарегистрирован: 2015-10-08
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Вызываю метод объекта, но вызывается @staticmethod с тем же именем -- что я сделал не так?

Изучаю тему, сделал тест в консоли пайтона:

 class A():
    def foo(self):
       print('object method')
    @classmethod
    def foo(cls):
       print('class method')
    @staticmethod
    def foo():
       print('static method')
obj = A()
obj.foo()
static method
A.foo()
static method

Подскажите, пожалуйста, что я сделал не так?

Офлайн

#2 Сен. 14, 2018 13:00:23

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Вызываю метод объекта, но вызывается @staticmethod с тем же именем -- что я сделал не так?

вы в корне не правильно поняли тему. Это работает совершенно не так



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Сен. 14, 2018 13:03:56

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Вызываю метод объекта, но вызывается @staticmethod с тем же именем -- что я сделал не так?

Вот посмотрите на пример использования

 >>> class A:
...     def foo(self):
...        print('object method', type(self))
...
>>>
>>> class B:
...     @classmethod
...     def foo(cls):
...        print('class method', type(cls))
...
>>>
>>> class C:
...     @staticmethod
...     def foo():
...        print('static method')
...
>>>
>>>
>>>
>>>
>>>
>>>
>>> A().foo()
object method <class '__main__.A'>
>>> A.foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() missing 1 required positional argument: 'self'
>>>
>>>
>>>
>>> B().foo()
class method <class 'type'>
>>> B.foo()
class method <class 'type'>
>>>
>>>
>>>
>>> C().foo()
static method
>>> C.foo()
static method



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Сен. 14, 2018 14:29:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Вызываю метод объекта, но вызывается @staticmethod с тем же именем -- что я сделал не так?

> но вызывается @staticmethod с тем же именем – что я сделал не так?

У всех методов должны быть разные имена, иначе последующий метод будет переопределять предыдущий с тем же именем.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Сен. 14, 2018 14:31:39)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version