Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类函数输出正确但方法错误_Python_Python 3.x - Fatal编程技术网

Python 类函数输出正确但方法错误

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

我的家庭作业问题要求我使用预先确定的类“Person”编写以下函数,它运行5个测试,一个代码分析器确保按照他们想要的方式完成,还有4个实例,我的代码通过了实例,但分析器没有通过

问题是:

使用Person类,编写一个函数print_friend_info(Person),该函数接受一个Person类型的参数,并且:

打印出他们的名字

打印出他们的年龄

如果此人有任何朋友,则打印“具有{name}的朋友”

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保护/私有成员的更多详细信息: