使用创建的类

2024-09-28 01:24:35 发布

您现在位置: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(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个功能:

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

    • 打印出他们的名字
    • 打印出他们的年龄
    • 如果此人有任何朋友,则打印“friends with{name}”
  2. 一个函数create_fry(),它返回一个表示Fry的Person实例。Fry今年25岁,全名是“Philip J.Fry”

  3. 一种函数make_friends(person_one, person_two),它将每个参数设置为另一个参数的朋友。

我得到的是:

^{pr2}$

错误处理程序显示"type object 'Person' has no attribute '_name'"


Tags: 函数nameselffriendagegetreturnobject
3条回答

一旦你有了一个Person对象,比如用标签person,你就可以像这样访问它的函数:

>>> person = Person('Pete', 43, 'Male')
>>> person.get_age()
43

不需要将person传递给成员函数get_age

^{pr2}$

但是get_age的定义确实有一个参数self

def get_age(self):
    return self._age

当您在一个对象上调用它时,它被隐式传递给函数。因此person作为self传递。您可以在上面的错误消息中看到我们传递了两个参数,隐式selfperson,和(错误的,不需要的)显式person。在

self._ageperson._age相同,但被封装,并隐藏在'getter'接口后面。在

因此,要修复代码,请删除:

person = Person

并更改调用,如person.get_age(person)to person.get_age()。在

你想删除这行吗

person= Person

print_friend_info(person):函数。在

这行代码不会创建新的Person实例,即使创建了,也不需要创建新的Person实例。您已经将person作为参数传入,您只需检索他的信息。在

由于类是python中的对象,所以通过person= Person操作,您就等于说person与{}是相同的。然后,当您试图在personget_name时,这是不起作用的,因为person不是类的实例,而是一个类对象。因此它没有_name属性。在用适当的参数实例化它之后,它将只有一个_name属性。在


it still dosn't print the info needed

^{pr2}$

这个代码似乎不对。它不打印数据,而是返回数据。"""之间的文本没有任何作用,因为您已经用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_friend_info中

我想你的问题是这条线

person = Person

通过这样做,您只需重写person实例,并将其替换为person类的定义

试着把那条线拉开,看看发生了什么

相关问题 更多 >

    热门问题