Как я могу заставить код OOP печатать имя моих объектов классов? - PullRequest
0 голосов
/ 19 июня 2020

Я пытался сделать программу на основе OOP в python. Я дал ему объект для работы и попытался заставить его печатать имя, но он не работает.

class human:
    def __init__(self, name):
        print("this is a human")
    def name(self, name):
        print("this is {}".format(bob.name))

bob = human("bob")

Кто-нибудь знает, в чем может быть проблема?

Ответы [ 4 ]

3 голосов
/ 19 июня 2020

Помимо ответов, которые вы уже получили (которые решают вашу проблему), я бы предложил не иметь метода, который печатает имя. Скорее у вас должен быть метод __str___ dunder, который определяет поведение объекта при печати экземпляра.

class human:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return self.name

person = human("bob")

print(person)
'bob'

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

>>> person

Вы можете сделать это с помощью __repr__:

def __repr__(self):
    return f'when entering the instance name in the console: {self.name}'

Это напечатает:

when entering the instance name in the console: bob

Мне это кажется больше pythoni c, чем метод, который просто печатает имя.

2 голосов
/ 19 июня 2020
  1. Вы никогда не сохраняете имя в экземпляре, откуда оно взялось бы имя? Ваш __init__ должен делать что-то в соответствии со строками self.name = name
  2. метод и атрибут name будут конфликтовать, последний будет затенять (скрывать) первый, и он должен искать любой атрибут его использование на self
1 голос
/ 19 июня 2020

в коде нужно обновить пару вещей:

  • bob - это экземпляр, который не определен в human class
  • обратите внимание, что функции init, name ожидают внешних param, но вы никогда не используете его в функции. (в self. = name) для его использования: определите переменную в классе с именем 'name' и обновите вашу функцию до:
class human:
    _name = ""
    def __init__(self, name):
        print("this is a human")
        self._name = name
    def name(self):
        print("this is "+ self._name)

bob = human("bob")
bob.name()
  • bob = human("bob") только функция инициализации и вы должны позвонить bob.name(), чтобы вызвать функцию print-name
1 голос
/ 19 июня 2020

Вы никогда не присваивали объекту переданное имя. Попробуйте:

class human:

    def __init__(self, name):
        print("this is a human")
        self.name = name
    def print_name(self):
        print("this is {}".format(self.name))
bob = human("bob")
bob.print_name()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...