来自类的Python实例未启动

时间:2018-10-07 11:12:44

标签: python class

我正在学习python,目前正在课堂上练习。有了这个,我不知道出了什么问题。说明是:

写一个名为Pets的类,它具有以下属性:

  • 名称
  • 类型
  • 年龄

它应该具有创建这些属性的__init__方法,并且还应该具有以下方法:

  • 设置名称为名称分配值
  • set_type为类型分配一个值
  • set_age为年龄分配一个值

  • get_name返回name的值

  • get_type返回类型的值
  • get_age返回age的值

然后,编写一个程序,该程序启动一个对象并提示用户输入名称,类型和年龄。使用对象的方法查找宠物的名称,类型和年龄,并将其显示在屏幕上。

这是我编写的代码:

class Pet():

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

    def set_name(self):
        name = input("Type in the pet's name: ")

    def set_type(self):
        type = input("Type in the pet's type: ")

    def set_age(self):
        age = int(input("Type in the pet's age: "))

    def get_name(set_name):
        return set_name

    def get_type(set_type):
        return set_type

    def get_age(set_age):
        return set_age

 pet = Pet(set_name, set_type, set_age)

我收到一个NameError:名称'set_name'未定义。从Pet类创建对象时,我尝试了不同的参数。

我应该如何定义方法和参数才能使其正常工作?

2 个答案:

答案 0 :(得分:0)

pet = Pet(set_name, set_type, set_age) 您永远不会定义全局变量set_nameset_typeset_age的含义。如果它们是字符串,请使用pet = Pet("set_name", "set_type", "set_age")

那么这是错误的: `def get_name(set_name):         返回set_name

def get_type(set_type):
    return set_type

def get_age(set_age):
    return set_age`

方法的第一个参数应为self,因此返回的实际上是对象本身。

def set_name(self): name = input("Type in the pet's name: ") 同样是错误的,您将输入的结果存储在一个临时变量中。

这更像是一个适当的类(尽管我将使用属性而不是显式的setter / getter):

class Pet:
    def __init__(self, name, type, age):
        self.name = name
        self.type = type
        self.age = age

    def set_name(self, name):
        self.name = name

    def set_type(self, type):
        self.type = type

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

    def get_name(self):
        return self.name

    def get_type(self):
        return self.type

    def get_age(self):
        return self.age

 pet = Pet("Foo", "cat", 4)

答案 1 :(得分:0)

调用命令时:

pet = Pet(set_name, set_type, set_age)

尽管set_name,set_type和set_age是您类的方法,但它们被解释为变量,并且尚未初始化。

尝试将代码重构为类似的内容:

name = 'Ted'
type = 'Bear'
age = 5

pet = Pet(name, type, age)