Initialise child class with instance of parent class

被刻印的时光 ゝ 提交于 2020-01-06 20:09:08

问题


Suppose I have a class:

class Person(object):

    def __init__(self, name, hobbies):

        self.name = name
        self.hobbies = hobbies

... (and so on)

Now I want to initialise a child class, Employee, which extends person. I would like to initialise that class with an instance of the Person class. So I would like to do:

class Employee(Person):

    def __init__(self, person, salary):

        # Initialise the superclass from the given instance somehow
        # I know I could do: 
        super(Employee, self).__init__(person.name, person.hobbies)

        # But could I somehow do something like: 
        super(Employee, self).__init__(person)

        # (In this case the difference is small, but it could 
        # be important in other cases)

        # Add fields specific to an "Employee"
        self.salary = salary

So that I can then call:

p1 = Person('Bob', ['Bowling', 'Skiing'])
employed_p1 = Employee(p1, 1000)

Is there any way I can do this, or do I explicitly have to call the parent class's constructor again?

Thanks a lot!


回答1:


I thnk you want something like this:

class Person(object):

    def __init__(self, name, hobbies):
        self.name = name
        self.hobbies = hobbies
    def display(self):
        print(self.name+' '+self.hobbies[0])

class Employee(Person):
    def __init__(self, a, b =None,salary=None):
        if b is None:
            self.person = a 
        else:
            self.person = Person(a,b)
        self.name = self.person.name
        self.hobbies = self.person.hobbies
        self.salary = salary


bob = Employee('bob',['Bowling', 'Skiing'])
bob.display()

sue1 = Person('sue',['photography','music'])
sue2 = Employee(sue1,salary=123)
sue2.display()

I've added in the 'display' function just to make it easier to follow. Hope this helps.



来源:https://stackoverflow.com/questions/35361992/initialise-child-class-with-instance-of-parent-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!