Как я могу использовать __. init__ и ООП для Python - PullRequest
1 голос
/ 16 октября 2019

Я новичок в Python и ООП. Ранее я делал Python в стиле процедурного программирования.

Мне нужно написать класс с именем Pet, который должен иметь следующие атрибуты данных:

  1. __name (для имени питомца)
  2. __animal_type (длятип домашнего животного, такой как собака, кошка)
  3. __age (для возраста питомца)

Он должен содержать инициализатор __init__, который создает эти атрибуты. Он также должен иметь все методы мутатора и метода доступа. Напишите программу, которая создает объект класса и предлагает пользователю ввести имя, тип и возраст своего питомца. В конце программы выведите на экран имя, тип и возраст питомца. Пример вывода приведен ниже.

Enter Pet Name: Lucky
Enter Pet Type: Dog
Enter Pet Age: 5

Pet Lucky is a dog, and it is 5 years old

Это то, что я сделал до сих пор (он не запускается на моем cmd, код ошибки отсутствует)

class Pet:
    def set_name(self, name):
        self.__name = name

    def set_animal_type(self, animal_type):
        self.__animal_type = animal_type

    def set_age(self,age):
        self.__age = age

    def get_name(self):
        return self.__name

    def get_animal_type(self):
        return self.__animal_type

    def get_age(self):
        return self.__age

name = input("Enter pet name: ")
animal_type = input("Enter pet type: ")
age = input("Enter pet age: ")


p = Pet()
p.set_name(name)
p.set_animal_type(animal_type)
p.set_age(age)

print("Pet %s is a %s ,and it is %s years old." %(p.set_name(), p.set_animal_type(), p.set_age()))

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы вызываете сеттер вместо геттера. Измените строку печати следующим образом

print("Pet %s is a %s ,and it is %s years old." %(p.get_name(), p.get_animal_type(), p.get_age()))

Также добавьте отсутствующий метод инициализации

    def __init__(self, name, animal_type, age):
        self.name = name
        self.animal_type = animal_type
        self.age = age
0 голосов
/ 16 октября 2019

Вы должны прочитать о методе класса и методе espeacilly dunder, вот что вы просите сделать.

class Pet:

    def __init__(self, name, animal_type, age):
        self.name = name
        self.animal_type = animal_type
        self.age = age

    def __str__(self):
        return f"Pet {self.name} is a {self.animal_type} ,and it is {self.age} years old." 

    def __repr__(self):
        return self.__str__

    def __setattrib__(self, name, value):
        self.__dict__[name] = value

    def __getattrib__(self, name):
        return self.__dict__[name]

name = input("Enter pet name: ")
animal_type = input("Enter pet type: ")
age = input("Enter pet age: ")


p = Pet(name, animal_type, age)
print(p)

p.name = "new_name"
p.animal_type = "cat"
p.age = "10"

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