функция питона ведет себя по-разному - PullRequest
0 голосов
/ 12 апреля 2019

Объявление класса с методом print с параметром self:

class First:
  def print(self): 
    print('working') 
    return 2

Попытка вызова метода без создания экземпляра класса:
First.print() Получение сообщения ниже:

TypeError: print() missing 1 required positional argument: 'self'

Теперь при создании экземпляра класса и доступе к методу: он работает.

first = First()
first.print()

# working
# 2

Теперь определение того же класса без каких-либо параметров в методе print:

class First:
  def print():
    print('working')
    return 2

Вызов одного и того же метода без создания экземпляра класса, и он работает:

First.print()

# working
# 2

Без определения параметра метода, метод python ведет себя как статический.Это правда или что-то еще?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

В первом случае это функция параметра one . Итак, Class.f() терпит неудачу. Во втором примере это функция ноль параметров. Итак, Class.f() работает.

Когда вы создаете экземпляр, первый параметр автоматически привязывается к этому экземпляру, и вам нужно передать параметры n-1. Итак, это работает в вашем первом примере, но не будет работать во втором.

0 голосов
/ 12 апреля 2019

self относится к связанной переменной или объекту.так что это требует инстанцирования.где без self метод становится статическим (метод класса в контексте Python) и может быть вызван с использованием Class Name.Также вы должны написать @classmethod декоратор над определением метода.так что это четко заявить, что это classmethod.

class First:
  @classmethod
  def print(cls):
    print('working')
    return 2
First.print()

Для справки https://medium.com/quick-code/understanding-self-in-python-a3704319e5f0

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