我正在学习python,目前正在课堂上练习。有了这个,我不知道出了什么问题。说明是:
写一个名为Pets的类,它具有以下属性:
它应该具有创建这些属性的__init__
方法,并且还应该具有以下方法:
set_age为年龄分配一个值
get_name返回name的值
然后,编写一个程序,该程序启动一个对象并提示用户输入名称,类型和年龄。使用对象的方法查找宠物的名称,类型和年龄,并将其显示在屏幕上。
这是我编写的代码:
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类创建对象时,我尝试了不同的参数。
我应该如何定义方法和参数才能使其正常工作?
答案 0 :(得分:0)
pet = Pet(set_name, set_type, set_age)
您永远不会定义全局变量set_name
,set_type
和set_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)