E1120: нет значения аргумента в вызове конструктора - PullRequest
0 голосов
/ 02 июня 2018

Я довольно новичок в Python Classes, и я хотел протестировать простой код:

class information:
  def __init__(self,fname,lname):
    self.fname = fname
    self.lname = lname
  def first(self):
    print ("First name :", self.fname)
  def last(self):
    print ("Last name :",self.lname)
firstname = information("Name")
lastname = information("Test")

Однако Pylint выдает мне ошибку:

E1120:No value for argument 'lname' in constructor call (11,13)
E1120:No value for argument 'lname' in constructor call (12,12)

В чем проблемаВот?Я думаю, что я определил lname как 'self.lname = lname "

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

__init__() ожидает два позиционных аргумента, но один задан.

См. Ваш __init__():

def __init__(self,fname,lname):

Вы должны создать объект класса и использовать этот объект дляВызовите функции класса следующим образом:

class information:

  def __init__(self,fname,lname):
    self.fname = fname
    self.lname = lname

  def first(self):
    print ("First name :", self.fname)

  def last(self):
    print ("Last name :",self.lname)

obj = information("Name", "Test")   # <-- see two arguments passed here.
firstname = obj.first()
lastname = obj.last()

# First name : Name
# Last name : Test

Примечание : Когда вы создаете объект класса, конструктор класса вызывается автоматически.Аргументы, которые вы передаете при создании объекта, должны соответствовать количеству аргументов в конструкторе.

0 голосов
/ 02 июня 2018

Как прокомментировал Остин, init ожидает значение для параметра lname.

Вы, кажется, новичок в python, поэтому предложите вам использовать подобное руководство, чтобы лучше понятьпараметры функции https://www.tutorialspoint.com/python/python_functions.htm

Я постараюсь немного подвести итог.Существует несколько способов объявления аргументов функции:

  1. Позиционный (ваш случай): параметры являются обязательными и должны быть вызваны в этом порядке (*).Например:


    def f(arg1, arg2):
        print(arg1)
        print(arg2) 

    f(1, 2)
    # OUT: 1
    # OUT: 2

Аргументы по умолчанию.Они имеют значение по умолчанию, если они явно не установлены пользователем.Они уважают порядок (*) и должны всегда идти после позиционных.Пример:


    def f(arg1, arg2="default"):
        print(arg1)
        print(arg2) 

    f(1)
    # OUT: 1
    # OUT: default

    f(1, 2)
    # OUT: 1
    # OUT: 2

Параметры переменной длины (* аргументы).Они идут и получают все параметры из этой точки в кортеж.Они отмечены символом *.Пример:


    def f(arg1, *args):
        print(arg1)
        print(args) 

    f(1)
    # OUT: 1
    # OUT: ()

    f(1, 2, 3, 4, 5)
    # OUT: 1
    # OUT: (2, 3, 4, 5)

Аргументы ключевых слов (**kwargs).Как Получить все именованные параметры, имя которых не является позиционным параметром или параметром по умолчанию в словаре.Они отмечены **.Пример:


    def f(arg1, **kwargs):
        print(arg1)
        print(kwargs) 

    f(1)
    # OUT: 1
    # OUT: {]

    f(1, a=2, b=3, c=4, d=5)
    # OUT: 1
    # OUT: {'a':2, 'b':3, 'c': 4, 'd:' 5}

(*) Параметры можно передавать по имени, поэтому вы можете использовать порядок, который вам нравится, таким образом.НО, если вы передаете параметр по имени, следующие параметры также должны быть переданы по имени.

...