【问题标题】:how do i use __.init__ and do OOP for python我如何使用 __.init__ 并为 python 做 OOP
【发布时间】:2019-10-16 17:43:03
【问题描述】:

我是 Python 和 OOP 的新手。我以前用过程编程风格做过 python。

我需要写一个名为Pet的类,它应该有以下数据属性:

  1. __name(宠物的名字)
  2. __animal_type(用于宠物的类型,例如狗、猫)
  3. __age(宠物的年龄)

它应该包含一个创建这些属性的__init__initializer。它也应该有 所有 mutator 和 accessor 方法。编写一个程序,创建一个对象 类并提示用户输入其宠物的名称、类型和年龄。在结束时 程序,在屏幕上显示宠物的名字、类型和年龄。样本输出是 下面给出。

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()))

【问题讨论】:

  • 我不敢问,但是为什么你需要getter和setter?这就是用 Python 教授 Java 的人会给的那种任务。
  • 在 Python 中,您不会为属性名称错误、只返回属性值什么都不做的 getter 以及只设置属性值什么都不做的 setter 烦恼。

标签: python oop


【解决方案1】:

你调用的是 setter 而不是 getter 按如下方式更改打印行

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

【讨论】:

  • 您可能还想解决缺少的__init__ 方法。
  • @potatoooooooooo 如果这解决了您的问题,您可以接受答案
【解决方案2】:

您应该阅读有关类方法和特别是 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2011-11-03
    • 2010-10-29
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多