Python 使用创建的类
我已创建了该类人员:Python 使用创建的类,python,Python,我已创建了该类人员: class Person(object): def __init__(self, name, age, gender): self._name = name self._age = age self._gender = gender self._friend = None def __eq__(self, person): return str(self) == str(pe
class Person(object):
def __init__(self, name, age, gender):
self._name = name
self._age = age
self._gender = gender
self._friend = None
def __eq__(self, person):
return str(self) == str(person)
def __str__(self):
if self._gender == 'M':
title = 'Mr'
elif self._gender == 'F':
title = 'Miss'
else:
title = 'Ms'
return title + ' ' + self._name + ' ' + str(self._age)
def __repr__(self):
return 'Person: ' + str(self)
def get_name(self):
return self._name
def get_age(self):
return self._age
def get_gender(self):
return self._gender
def set_friend(self, friend):
self._friend = friend
def get_friend(self):
return self._friend
我现在需要有3个功能:
使用Person类编写一个函数print\u friend\u infoperson,该函数接受Person类型的单个参数,并且:
打印出他们的名字
打印出他们的年龄
如果此人有任何朋友,则打印“具有{name}的朋友”
函数create_fry返回代表fry的Person实例。Fry今年25岁,全名是“Philip J.Fry”
函数的作用是将每个参数设置为另一个参数的朋友
这就是我得到的:
def print_friend_info(person):
person= Person
person_name=person.get_name(person)
person_age=person.get_age(person)
person_gender=person.get_gender(person)
person_friends=person.get_friend(person)
return person_name, person_age, person_gender, person_friends
"""print (person_name)
print (person_age)
print ('Friends with {'+person_friends+'}')"""
def create_fry():
fry=Person("Philip J. Fry", 23, "M")
return fry
def make_friends(person_one,person_two):
return person_one.set_friend(person_two)
错误处理程序说类型对象“Person”没有属性“\u name”您想删除这一行吗
person= Person
person = Person
从print\u friend\u infoperson:函数
该行不会创建一个新的Person实例,即使创建了,您也不需要这样做。您已经获得了作为参数传入的人员,您需要做的就是检索他的信息
因为类在python中是对象,所以通过person=person,您只是说person与person相同。然后,当您尝试在person上获取_名称时,这不起作用,因为person不是类的实例,而是类对象。因此它没有_name属性。只有在使用适当的参数实例化它之后,它才会有一个_name属性
它仍然无法打印所需的信息
这个代码似乎不正确。它不打印数据,而是返回数据。文本between不起任何作用,因为您已将函数保留为return
可能应该被替换为
print (person_name)
print (person_age)
print ('Friends with {'+person_friends+'}')
return # this is not necessary, but it's better to be explicit.
如果参数person已经是一个实例,则不理解您试图在print\u friend\u info中输入的内容 我想你的问题是这条线
person= Person
person = Person
通过这样做,您只需重写person,它是一个实例,并将其替换为类person的定义
试着遥控那条线,看看会发生什么。一旦你有了一个Person对象,比如一个标签Person,你就可以像这样访问它的功能:
>>> person = Person('Pete', 43, 'Male')
>>> person.get_age()
43
您不需要将person传递给成员函数get_age:
但get_age的定义有一个参数,self:
当您在对象上调用函数时,它会隐式传递给函数。所以这个人被传为自我。您可以在上面的错误消息中看到,我们传递了两个参数,内隐的self-person和错误的、不需要的explicit-person
self.\u age与person.\u age相同,但被封装并隐藏在“getter”界面后面
因此,要修复代码,请删除:
person = Person
并将诸如person.get\u ageperson之类的调用更改为person.get\u age。我已删除了该行,但它仍然无法打印所需的信息。如何调用该函数?这取决于你传递给那个函数的参数。这与你的问题无关,但那个Person类非常不和谐。虽然getter方法在其他语言中很常见,但不需要get_name和类似的方法。Python中更自然的设计可能只是使用普通属性或属性描述符,它们的工作方式与使用它们的代码的常规属性类似,但使用getter和/或setter函数实现。
person = Person