如何创建具有属性的超类实例?

2024-03-29 06:49:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的类,我想创建一个名人的实例,也是一个人,有一个年龄属性。就我所知,我很确定morganFreeman是一个名人,但不是一个人;我该如何实例化,使他同时具有子类和超类的实例,并同时具有这两种属性?你知道吗

class Person(object):
    def __init__(self,age):
        self.age = age
class Celebrity(Person):
    def __init__(self,profession):
        super(Celebrity,self).__init__(profession)

morganFreeman = Celebrity("actor")
bob = Person(45)

Tags: 实例selfage属性objectinitdef子类
2条回答

您需要接受Celebrity__init__()方法中的age参数,然后将其传递给基类__init__()

class Person(object):
    def __init__(self,age):
        self.age = age

class Celebrity(Person):
    def __init__(self, age, profession):
        self.profession = profession
        super(Celebrity, self).__init__(age)

morganFreeman = Celebrity(55, "actor")
bob = Person(45)   

>>> bob = Person(45)   
>>> morganFreeman = Celebrity(55, "actor")
>>> morganFreeman.age
55
>>> morganFreeman.profession
'actor'
>>> bob.age
45
>>> bob.profession
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Person' object has no attribute 'profession'

这表明Celebrity对象同时具有ageprofession属性,而Person属性仅具有age。你知道吗

首先,self.Person = self是无意义的;self当然已经是self。你知道吗

其次,你的假设是错误的。morganFreeman既是名人又是人。根据定义,继承就是这样运作的。你知道吗

相关问题 更多 >