Отсутствует 1 обязательный позиционный аргумент

Позвольте мне начать с того, что я настолько же зелен, насколько это возможно, когда дело доходит до программирования, но я делаю процесс. Однако мой разум все еще должен полностью понять, почему и что происходит.

В любом случае, под рукой, как предполагает Заголовок, я вставлю исходный код, который сведу к минимуму.

(Я использую Python версии 3.4.1)


class classname:
    def  createname(self, name):
        self.name = name;
    def displayname(self):
        return self.name;
    def saying(self):
        print("Hello %s" % self.name);

first = classname;
second = classname;

first.createname("Bobby");

Я вставлю сюда код ошибки:


Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
first.createname("Bobby")
TypeError: createname() missing 1 required positional argument: 'name'

Я понимаю, что мне нужно проверить ошибки и внимательно прочитать, что там написано, а также выполнить поиск перед публикацией. После этого я не смогу решить проблему, и я пришел сюда, чтобы опубликовать ее...

С этого момента вы можете прочитать, если вам интересно, что я думаю о том, что происходит в моей голове:

Ошибка говорит мне, что мне нужно еще 1 аргумент в имени, поэтому я, должно быть, ошибаюсь, но я уже пробовал что-то вроде этого:

first.createname("bobby", "timmy");

Имеете больше аргументов в названии? Если я правильно понимаю, аргумент в этом ->() & lt; -

Я также исключаю тот факт, что это будет def createname (self, name), потому что self есть или должно быть одиноко и не включено? Поэтому я не очень понимаю, что происходит.

Заранее благодарю и извините, если на этот вопрос уже был дан ответ, в таком случае я должен был его пропустить.


РЕШИТЬ:

 first = classname;
 second = classname;

Должно быть:

 first = classname();
 second = classname();

В скобках отсутствует, что, конечно, означает, что я просто сделал первый и второй EQUAL для чего-то другого, а не связал его с "фактическим

Ответ 1

Это очень простой ответ, удивленный, что вы так и не получили ответа! :(

Вы еще не создали объект.

Например, вы хотели бы написать:

first = classname()

вместо просто

first = classname

На данный момент, как вы написали, first указывает на класс. Например, если вы спросите, что такое first, вы получите:

<class '__main__.classname'>

Однако, после его создания (просто добавив () в конце), вы увидите, что first теперь:

<__main__.classname object at 0x101cfa3c8>

Важным отличием здесь является то, что ваш вызов создал класс, а мой создал объект.

Класс для объекта такой же, как человечество для вас, или как собака для Ласси.

Вы создали "собачий", а вы хотели создать "Лесси".


Примечание: вы также обычно хотите инициализировать ваши объекты. Для этого вы помещаете метод __init__ в ваш класс.