python面向对象的三大特性继承 多态 封装

1 继承 

    python的继承分为单继承和多继承,新建的类被成为派生类或者子类,而继承的类被成为父类或者超类

   查看继承关系

使用__bases__方法查看所有继承对象------》  对象.__bases__
如果没有指定继承父类,则python3中则默认所有的类都继承object类,也叫新式类。

    继承与抽象的关系

       一定是将对象中的类似的内容抽象出来,在进行继承

    软件的重用

       如果我们在开发过程中,需要写一个新类,而这个类的功能和已存在的类功能相似,那么就可以通过继承,获得部分的功能,减少代码量

       同样的标准库或者第三方库同样可以被继承

    派生

         新类中也可以有自己的属性和方法,其中属性成为派生属性,方法成为派生方法。但是在定义的时候,要注意尽量别和父类的属性名和方法名重复,因为在调用的时候,如果新类中有,就回优先使用自己的而不去找父类的。

         如果新类中的方法需要用到父类中同名的方法,则可以使用类名.方法名()方法名直接调用,也可以使用supper()方法直接调用

        

# class animal:
#     def __init__(self,name,aggr,hp):
#         self.name=name
#         self.aggr=aggr
#         self.hp=hp
#
#     def eat(self):
#         self.hp+=100
# class dog(animal):
#     def __init__(self,name,aggr,hp,kind):
#         animal.__init__(self,name,aggr,hp)# 这里的self 是dog的self
#         self.kind=kind                         #派生属性  在父类的基础之上又派生了新的属性
#     def bite(self,person):                     #派生方法  在父类的基础上有派生了新的方法
#         person.hp-=self.aggr
#
#     def eat(self):
#         """
#         如果迹象实现新的功能也想使用父类原本的功能,还需要在子类中在掉用父类
#         :return:
#         """
#         animal.eat(self)# 这里的self是dog  作为参数传给了animal.eat
#         self.teeth = 2
# class person(animal):
#     def __init__(self,name,aggr,hp,sex):
#         animal.__init__(self,name,aggr,hp)
#         self.money=0
#         self.sex=sex
#
#     def attack(self,dog):
#         dog.hp-=self.aggr
#
#     def get_weson(self,weson):
#         pass
#
# jin=dog('二哈',100,500,'哈士奇')
# jin.eat()
# print(jin.hp)
# dan=person('dandan',20,100,'baobao')
# dan.eat()
# print(dan.hp)
# jin.bite(dan)
# print(dan.hp)

  super()用法

class animal:
    def __init__(self,name,aggr,hp):
        self.name=name
        self.aggr=aggr
        self.hp=hp

    def eat(self):
        self.hp+=100
        print('吃药回血')

class dog(animal):
    def __init__(self,name,aggr,hp,kind):
        #super(dog,self).__init__(name,aggr,hp)  supper内参数可以不传
        super().__init__(name, aggr, hp)
        self.kind=kind
    def eat(self):
        print('dog eating')


jin=dog('二哈',200,100,'哈士奇')
print(jin.name)
jin.eat()
super(dog,jin).eat()   #如果是在类外 使用supper(类名,实例化名).方法()   就会执行类中的方法

猜你喜欢

转载自www.cnblogs.com/yuan-x/p/12178847.html