如何使用属性创建超类的实例?

时间:2015-03-27 11:27:51

标签: python oop

我有以下课程,我想创建一个Celebrity实例,它也是一个Person并具有age属性。就像我拥有它一样,我非常确定摩根弗里曼是一个名人而不是一个人;我如何实例化,以便他既是子类和超类的实例又具有两者的属性?

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)

2 个答案:

答案 0 :(得分:1)

首先,self.Person = self是胡说八道; <{1}}当然已经是self

其次,你的假设是错误的。 self既是名人又是人。根据定义,这就是继承的工作原理。

答案 1 :(得分:1)

您需要接受age__init__()方法中的Celebrity参数,然后将其传递给基类__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