我有以下课程,我想创建一个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)
答案 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
个对象同时具有age
和profession
属性,而Person
属性只有age
。