南七星之家 发表于 2023-3-1 17:52:05

Python教程:类的派生

一、派生

派生:子类中新定义的属性的这个过程叫做派生,并且需要记住子类在使用派生的属性时始终以自己的为准
1 派生方法一(类调用)

指名道姓访问某一个类的函数:该方式与继承无关
class OldboyPeople:
    """由于学生和老师都是人,因此人都有姓名、年龄、性别"""
    school = 'oldboy'

    def __init__(self, name, age, gender):
      self.name = name
      self.age = age
      self.gender = gender


class OldboyStudent(OldboyPeople):
    """由于学生类没有独自的__init__()方法,因此不需要声明继承父类的__init__()方法,会自动继承"""

    def choose_course(self):
      print('%s is choosing course' % self.name)


class OldboyTeacher(OldboyPeople):
    """由于老师类有独自的__init__()方法,因此需要声明继承父类的__init__()"""

    def __init__(self, name, age, gender, level):
      OldboyPeople.__init__(self, name, age, gender)
      self.level = level# 派生

    def score(self, stu_obj, num):
      print('%s is scoring' % self.name)
      stu_obj.score = num


stu1 = OldboyStudent('tank', 18, 'male')
tea1 = OldboyTeacher('nick', 18, 'male', 10)print(stu1.__dict__)
{'name': 'tank', 'age': 18, 'gender': 'male'}


print(tea1.__dict__)
{'name': 'nick', 'age': 18, 'gender': 'male', 'level': 10}2 派生方法二(super)


[*]严格以来继承属性查找关系
[*]super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系)
[*]super().__init__(不用为self传值)
[*]super的完整用法是super(自己的类名,self),在python2中需要写完整,而python3中可以简写为super()
class OldboyPeople:
    school = 'oldboy'

    def __init__(self, name, age, sex):
      self.name = name
      self.age = age
      self.sex = sex

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
class OldboyStudent(OldboyPeople):
    def __init__(self, name, age, sex, stu_id):
      # OldboyPeople.__init__(self,name,age,sex)
      # super(OldboyStudent, self).__init__(name, age, sex)
      super().__init__(name, age, sex)
      self.stu_id = stu_id

    def choose_course(self):
      print('%s is choosing course' % self.name)


stu1 = OldboyStudent('tank', 19, 'male', 1)print(stu1.__dict__)
{'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Python教程:类的派生