继承

继承

继承:定义类的时候,在类名后面加上它的父类
继承以后,可以使用父类的方法,同时还可以针对不满足条件的方法进行重写,除此之外,还可以新增独有的方法

class Animal:  #父类
    def eat(self):
        print("吃东西")

    def drink(self):
        print("水")

    def sleep(self):
        print("闭眼睡觉")

class Newzebra(Animal):  #斑马
    def __init__(self,name):
        self.name=name

    def eat(self):  #重写父类方法
        super().eat() #super代表实例化自己的父类
        print("吃稻草")

    def colour(self):
        print("身上有条纹")

class lion(Animal):
    def __init__(self,name):
        self.name=name

    def Characteristics(self):
        print("特别凶")

    def eat(self):
        print("肉")


nl=lion("狮子")
nl.eat()
nl.Characteristics()
nz=Newzebra("斑马")
nz.eat()
nz.drink()
nz.sleep()
nz.colour()

1、类:变量:实例变量、类变量+操作他们的方法,局部变量
2、本质:把需要管理的数据封装到实例里面,然后基于类中的方法定义规则,以此来失效业务数据的完整性和一致性(防止出现脏数据)
3、类变量:不加self表示类变量,不需要实例化就可以直接使用,类变量在整个实例化的对象中是公用的,类变量通常不作为实例变量使用
4、局部变量:在方法中或者函数中定义,就是局部变量
5、数据成员:类变量或者实例变量
6、实例变量:加了self的表示实例变量,定义在方法中的变量,只作用于当前实例的类

 class Person:
     count=0
     def __init__(self,name):
         self.name=name

class Person:  #父类
    count=0 #类变量
    def __init__(self,name):
        self.name=name #实例变量,
    def get_name(self):#self传递的参数是实例的内存地址,告诉这个方法使用哪个实例的数据
        return  self.name
    def set_name(self):
        self.name="globle"
p=Person()  #实例p
p1=Person() #实例p1
print(id(p))  #实例p地址
print(id(p1))  #实例p1地址
print(id(Person)) #类地址

7、类在内存中只有一个份,每个实例有各自在内存中保存的地址,各自独立

wxy=Person("王晓艳")
print(wxy.get_name())

8、子类继承了所有的父类方法
9、子类中需要初始化父类,提供完整的构造函数的初始化,满足父类的所有参数使用要求

10、子类没有实现__init__方法时,会自动调用父类的__init__方法
11、父类中__init__方法如果需要传入参数,则会报错,需要在实例化时候传入参数
12、父类中的私有方法和私有类,不能被子类调用和继承

class Teacher(Person): #子类
    count=0
    def __init__(self,name,salary):
        Person.__init__(self,name)
        self.salary=salary
        Teacher.count+=1

    def get_name(self):#重写,overridde:把父类的方法做了重写
        return "mygirl:"+self.name

t=Teacher("WXY",1000) #触发了__init__的执行了,叫实例化
print(t.get_name())
s=Teacher("TSH",10000)
print(s.get_name())
print(Teacher.count)
print(t.count)

13、 判断是否是类的实例
if isinstance(t,Person):
print(“t是Person的实例”)
else:
print(“t不是Teacher的实例”)

14、python新式类,广度优先
1)类为经典类时,多继承情况下,会按照深度优先查找
2)类为新式类时,多继承情况下,会按照广度优先查找

class D:
    def test(self):
        print("D")

class C(D):
    def test(self):
        print("C")

class B(D):
    def test(self):
        print("B")

class A(B, C):
    def test(self):
        print("A")

a = A()
a.test()

广度优先:当调用A类test函数时,如下图所示,先查找A类有无test函数,再查找B类,再查找C类,最后查找D类。
深度优先:当调用A类test函数时,如下图所示,先查找A类中有无test函数,再查找B类,再查找D类,最后查找C类

15、抽象:把某一类对象,他们共同拥有的能力抽离出来实现一个父类,基于这个父类来定义各自不同的子类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值