Python 类函数输出正确但方法错误
我的家庭作业问题要求我使用预先确定的类“Person”编写以下函数,它运行5个测试,一个代码分析器确保按照他们想要的方式完成,还有4个实例,我的代码通过了实例,但分析器没有通过 问题是: 使用Person类,编写一个函数print_friend_info(Person),该函数接受一个Person类型的参数,并且: 打印出他们的名字 打印出他们的年龄 如果此人有任何朋友,则打印“具有{name}的朋友”Python 类函数输出正确但方法错误,python,python-3.x,Python,Python 3.x,我的家庭作业问题要求我使用预先确定的类“Person”编写以下函数,它运行5个测试,一个代码分析器确保按照他们想要的方式完成,还有4个实例,我的代码通过了实例,但分析器没有通过 问题是: 使用Person类,编写一个函数print_friend_info(Person),该函数接受一个Person类型的参数,并且: 打印出他们的名字 打印出他们的年龄 如果此人有任何朋友,则打印“具有{name}的朋友” class Person(object): def __init__(self, n
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):
"""
(str) Return the name
"""
return self._name
def get_age(self):
"""
(int) Return the age
"""
return self._age
def get_gender(self):
"""
(str) Return the gender
"""
return self._gender
def set_friend(self, friend):
self._friend = friend
def get_friend(self):
"""
(Person) Return the friend
"""
return self._friend
def print_friend_info(person):
print(person._name)
print(person._age)
if person.get_friend() != None:
print("Friends with {}".format(person._friend._name))
所有测试均通过,包括打印朋友信息测试
测试,但输出以下错误的测试除外:
----分析错误---
您需要在“打印朋友信息”中打印此人的姓名
您需要在“打印朋友信息”中打印此人的年龄
您需要在print\u friend\u info中打印此人朋友的姓名
我已经试过了你的代码,它对我使用Python3.6.6是有效的。我有一些可能是问题的建议。首先,您不应该使用类的受保护属性(带下划线的变量)。您有获取对象数据的getter方法,所以请使用它们。在我看来,输出可以完成您在问题中提到的测试 代码的更改部分:
def print_friend_info(person):
print("Name: {}".format(person.get_name()))
print("Age: {}".format(person.get_age()))
if person.get_friend(): # You don't need to use "!= None". A simple if is enough.
print("Friends with {}".format(person.get_friend().get_name())
print("\n")
joe = Person("Joe", 42, "Male")
print_friend_info(joe)
mary = Person("Mary", 55, "Female")
print_friend_info(mary)
joe.set_friend(mary)
print_friend_info(joe)
>>> python3 test.py
Name: Joe
Age: 42
Name: Mary
Age: 55
Name: Joe
Age: 42
Friends with Mary
输出:
def print_friend_info(person):
print("Name: {}".format(person.get_name()))
print("Age: {}".format(person.get_age()))
if person.get_friend(): # You don't need to use "!= None". A simple if is enough.
print("Friends with {}".format(person.get_friend().get_name())
print("\n")
joe = Person("Joe", 42, "Male")
print_friend_info(joe)
mary = Person("Mary", 55, "Female")
print_friend_info(mary)
joe.set_friend(mary)
print_friend_info(joe)
>>> python3 test.py
Name: Joe
Age: 42
Name: Mary
Age: 55
Name: Joe
Age: 42
Friends with Mary
我已经试过了你的代码,它对我使用Python3.6.6是有效的。我有一些可能是问题的建议。首先,您不应该使用类的受保护属性(带下划线的变量)。您有获取对象数据的getter方法,所以请使用它们。在我看来,输出可以完成您在问题中提到的测试 代码的更改部分:
def print_friend_info(person):
print("Name: {}".format(person.get_name()))
print("Age: {}".format(person.get_age()))
if person.get_friend(): # You don't need to use "!= None". A simple if is enough.
print("Friends with {}".format(person.get_friend().get_name())
print("\n")
joe = Person("Joe", 42, "Male")
print_friend_info(joe)
mary = Person("Mary", 55, "Female")
print_friend_info(mary)
joe.set_friend(mary)
print_friend_info(joe)
>>> python3 test.py
Name: Joe
Age: 42
Name: Mary
Age: 55
Name: Joe
Age: 42
Friends with Mary
输出:
def print_friend_info(person):
print("Name: {}".format(person.get_name()))
print("Age: {}".format(person.get_age()))
if person.get_friend(): # You don't need to use "!= None". A simple if is enough.
print("Friends with {}".format(person.get_friend().get_name())
print("\n")
joe = Person("Joe", 42, "Male")
print_friend_info(joe)
mary = Person("Mary", 55, "Female")
print_friend_info(mary)
joe.set_friend(mary)
print_friend_info(joe)
>>> python3 test.py
Name: Joe
Age: 42
Name: Mary
Age: 55
Name: Joe
Age: 42
Friends with Mary
谢谢,我用x.get_name()替换了x.。_name的每个实例,它成功了。如果get_name(self)函数只输出self.\u name,您能解释一下为什么会有什么不同吗?您可以使用getter方法和protected属性获得相同的值,但是变量是受保护的,所以不应该在对象之外使用它。Python允许使用它,但Pylint说不应该这样做。使用受保护的属性可能是一个安全问题。您可以阅读有关Python受保护/私有成员的更多详细信息:谢谢,我用x.get_name()替换了x._name的每个实例,它成功了。如果get_name(self)函数只输出self.\u name,您能解释一下为什么会有什么不同吗?您可以使用getter方法和protected属性获得相同的值,但是变量是受保护的,所以不应该在对象之外使用它。Python允许使用它,但Pylint说不应该这样做。使用受保护的属性可能是一个安全问题。您可以阅读有关Python保护/私有成员的更多详细信息: