python·继承特性

继承特性

什么是继承
继承就是让类和类之间产生父子关系,子类可以拥有父类的静态属性和方法。
继承就是可以获取另外一个类中的静态属性和普通方法。(并非所有成员)
在python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生或子类。

注意:python中的继承分为:单继承和多继承 继承中的子类和父类的概念 父类:用于被继承的类。称之为父类,也叫做基类,或者超类
子类:继承其他类的类,称之为子类,也叫做派生类。

继承的作用
就是提高代码的重用率

继承引用
class Animal(object):
    type='动物'
    def __init__(self,name,age):
        self.name=namel
        self.age=age
    def eat(self):
        print('吃....')
    def slepp(self):
        print('睡觉')

class Dog(Animal):
    def look_house(self):
        print('看大门。。。')
class Cat(Animal):
    def cilmb_tree(self):
        print('爬树')
dog=Dog('金毛',8)
dog.eat()
dog.slepp()
dog.look_house()
print(dog.type)
cat=Cat('英短',10)
cat.eat()
cat.slepp()
cat.cilmb_tree()

#查看继承的父类
格式:类名.bases
注意:

#1.python3中,如果一个类没有继承任何类 默认继承abject 类。我们管这种叫新式类
#2.object类,是python中的祖宗,所有类都是从object类中继承下来的
print(Cat.__bases__)
print(Dog.__bases__)
print(Animal.__bases__)
(<class '__main__.Animal'>,)
(<class '__main__.Animal'>,)
(<class 'object'>,)

方法的复写

子类中定义了和父类中相同的方法,我们叫做方法的复写(派生方法)。

实例对象调用此方法的时候,就会调用自己类中的方法。
什么时候使用方法的复写
当父类的方法不能满足子类的需求的时候,就可以使用方法的复写。

class Animal(object):
    type='动物'
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def eat(self):pass
    def slepp(self):pass
class Dog(Animal):
    def look_house(self):
        print('看大门')
    def eat(self):
        print('吃狗粮')
    def slepp(self):
        print('睡觉')
dog=Dog('金毛',4)
dog.eat()
dog.slepp()

super()
子类和父类有相同的方法,如果子类向调用父类相同的方法,可以使super()函数调用父类的方法

1.super(类名,对象名).方法()既可以在类的内部也可以在类的外部使用
2.父类类名。方法名(self)–》Animal.eat(self)既可以在内部也可以在外部使用
3.super()。eat()—>只能在类的内部

class Animal(object):
    type='动物'
    def eat(self):
        print('吃。。。')
    def sleep(self):
        print('睡觉')
class Dog(Animal):
    def look_house(self):
        print('看大门')
    def eat(self):
        super().eat()#调用的是父类的eat()方法
        Animal.eat(self)#父类类名。方法名(self)
        print('吃狗粮')
dog=Dog('金毛',4)
super(Dog,dog).eat()
dog.eat()

init

1.如果子类不复习_init_()方法,会自动调用父类的_init_()方法。
2.如果子类复写了_init_()方法。不会自动调用父类的_init_()方法。
3.推荐显示的调用父类的方法。super().init()

class Person(object):
    def __init__(self):
        print('person')
class Student(Person):
    def __init__(self):
        super().__init__()
        print('student')
student=Student

派生属性:子类中添加的新属性
属性的覆盖:子类和父类又相同的属性的时候,将调用自己类种的属性

class Person(object):
    num = 10

    def __init__(self, name):
        print('person...')


class Student(Person):
    num = 20

    def __init__(self, name, age):  # age是派生属性
        super().__init__(name)
        self.name = name
        self.age = age
        print('student...')

    def eat(self):
        # print(super().num)
        print('xxx')


student = Student('zs', 10)
# student.eat()
# print(student.name)
# print(student.age)
student.eat()
print(Student.num)

父类中的私有方法和私有属性都是不能被子类继承下来的。

class Person(object):
    num=10
    _num1=20
    def __test1(self):
        print('__test1')
    def test2(self):
        print('person tset2')
class Student(Person):
    def test(self):
        print('xxxx')
        #print(Student.num)
        #print(Student._num1)
    def test3(self):
        print('test3...')
        # self.test2()
        # self.__test1() # 父类的私有方法是不能被继承下来的。

student = Student()
student.test3()
# student.test2()

猜你喜欢

转载自blog.csdn.net/weixin_44239431/article/details/86499379