美文网首页
类的继承

类的继承

作者: 丫丫姑娘_b55e | 来源:发表于2018-06-30 16:03 被阅读0次

    继承:继承就是让子类去拥有父类的属性和方法
    子类:继承者
    父类(超类):被继承者

    • 什么时候用继承:在写一个类的时候,发现这个类中的部分属性和方法另一个类都拥有,
      这个时候就不用去声明这些属性和方法,直接从另外一个类中继承下来就可以

    class Person:
    """人"""
    def _ init _(self, name='aaa', age=0):
    self.name = name
    self.age = age
    class Student(Person):
    pass
    stu1 = Student()
    print(stu1.name)

    实例二:可以继承哪些东西?

    1.公开属性可以继承
    2.私有的属性不可以继承
    3.公开的对象方法可以继承(私有的不行)
    4.类字段可以继承
    5.类的方法和静态方法可以

    总结:属性和方法除了私有的都可以继承; _ slots _不能继承的

    类的继承重写

    声明一个类,如果不声明其父类,那么这个类默认继承自object这个类。
    object类是python中所有类直接或者间接的父类

    • 重新实现从父类继承下来的方法 ---> 重写

    class Aniaml(object):

    def _ _init_ _(self, name):
        self.name = name
    
    def shout(self):
        print('%s:嗷嗷叫' % (self.name))
    
    def be_beat(self):
        print(self.name,'在跑')
        print('跑的时候嗷嗷叫')
    

    class Dog(Aniaml):

    # 重写父类的shout方法。然后通过Dog对象调用shout执行的是子类的方法
    def shout(self):
        print('%s:汪汪汪!'% (self.name))
    
    # 重写父类的be_beat,保留了父类实现的功能,并且添加了新的功能
    def be_beat(self):
        # super()指的就是父类对象
        super().be_beat()
    print('奋起反抗')dog1 = Dog('大黄')
    dog1.shout()
    dog1.be_beat()
    

    示例2:init方法的继承和重写

      class Person:
    """人"""
    def __init__(self, name='', age=0):
        self.name = name
        self.age = age
    
      class Student(Person):
    """学生类"""
    """
    重写init方法要注意:
    1.如果需要继承父类的对象属性,就需要通过super()._ _init_ _()
    去保留父类的对象属性。然后再添加新的属性
    """
    def _ _init_ _(self, name='', age=0, study_id=''):
        super()._ _init__(name, age)
        self.study_id =  study_id
    

    设计两个类:
    一个正方形类,拥有方法:求面积、求周长 拥有的属性是边长
    一个长方形类,拥有方法:求面积、求周长 拥有的属性是长和宽
    提示:正方形就是特殊的长方形

      class Rect:
    def _ _init_ _(self, length=0, width=0):
        self.length = length
        self.width = width
    
    def area(self):
        return self.width * self.length
    
    def perimeter(self):
        return (self.width + self.length)*2
      #写一个正方形类继承了长方形(Rect)的属性                       
      #通过添加假的私有属性_ side 使得长与宽相等  
     class Square(Rect):
    def  _ _init_ _(self, length=0, width=0, side=0):
        super()._ _init_ _(length, width)
        self.side = side
    
    @property
    def side(self):
        return self._side
    
    @side.setter
    def side(self, side):
        self.width = side
        self.length = side
        self._side = side
    
     s1 = Square()
    s1.side = 10
    print(s1.area())
    print(s1.perimeter())
    

    相关文章

      网友评论

          本文标题:类的继承

          本文链接:https://www.haomeiwen.com/subject/cswtuftx.html