面向对象三之继承和多态

一.继承的简介

1.继承是面向对象的三大特性之一

2.通过继承我们可以使一个类获取到其他类中的属性和方法

3.在定义类时可以在类名后面的括号里定义该类的父类,也叫超类或者基类

4.继承可以提高类的复用性,让类与类之间产生了关系,这样才有了多态的特性

class Animal():
    def __init__(self):
        self.name = '藏獒'
        self.age = 18
class Dog(Animal):
    pass
d = Dog()
print(d.name)
print(d.age)

输出结果:

藏獒
18

5.object 是所有类的父类,默认可以不写

class Dog():    #等价于class Dog(object)

6.isinstance的使用:在类中isinstance可以用来判断一个对象是不是另一个对象的实例

class Animal():
    def __init__(self):
        self.name = '藏獒'
        self.age = 18
class Dog(Animal):
    pass
d = Dog()
isinstance(d,Dog)     #检查d是否是属于Dog的实例
isinstance(d.Animal)     #检查d是否是属于Animal的实例

以上代码中的isinstance就是判断d是否分别是Dog Animal中的实例

**7.issubclass的使用:**检查一个类是否是另一个类的子类

class Animal():
    def __init__(self):
        self.name = '藏獒'
        self.age = 18
class Dog(Animal):
    pass
d = Dog()
issubclass(Dog,Animal)     #检查Dog是否是Animal的子类

以上的issubclass就是检查Dog是否是Animal的子类

二.方法的重写

**1.方法重写:**如果在子类中有和父类同名的方法,则通过子类实例去调用方法时,会调用子类的方法而不是父类的方法,这个特点称为方法的重写(也叫覆盖)

class Animal():
    def __init__(self):
        self.name = '藏獒'
        self.age = 18
    def fk(self):
        print('欢迎回来')
class Dog(Animal):
    def fk(self):
        print('nice to meet you')
d = Dog()
d.fk()

输出结果:

nice to meet you

2.优先级原则(方法重写的另一种表现形式)
当我们调用一个对象的方法时:
会优先去当前对象中寻找是否具有该方法,如果有则直接调用
如果没有,则去当前对象的父类中寻找,如果父类中有则直接调用父类中的方法
如果没有,则去父类中的父类寻找,以此类推,直到找到object,如果依然没有找到就报错了

三.super()的使用

1.super()的作用:可以动态获取当前类的父类

2.super()括号中不需要传入self参数

class ClassMate():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def message(self):
        print(self.name)
        print(self.age)
class Student(ClassMate):
    def __init__(self,female,name,age):
        self.female = female
        super().__init__(name,age)    #通过super()获取当前类的父类并初始化父类的属性
    def n_l(self):
        print(self.female)
s = Student('男','Tony',7)
print(s.female)
print(s.name)
print(s.age)

四.多重继承

1.可以在类的后面的括号中添加多个父类来实现多重继承

2.多重继承的查找方法:如果多个父类中有同名的方法,则会在第一个父类中查找该方法,如果第一个父类没有该方法然后再去第二个父类中查找

class Animal():
	pass
class Woder():
	pass
class Dog(Animal,Woder)    #先查找在Animal中的该方法,如果没有在去Woder查找该方法

class Dog(Woder,Animal)    #先查找在Woder中的该方法,如果没有在去Animal查找该方法

3.类名.bases 这个属性可以用来获取当前类的父类

class Animal():
	pass
class Woder():
	pass
class Dog(Animal,Woder):
    pass
print(Dog.__bases__)   #获取Dog类的所有父类

五.多态

1.多态也是面向对象的三大特性之一
2.多态是指一个对象可以以不同形态去呈现

比如print()函数即可以打印字符串,也可以打印整型等其他多种不同数据类型,这就是所谓的多态

六.属性和方法

1.属性的分类:类属性和实例属性
1.1 什么是类属性
在类中直接定义的属性就是类属性

class Animal():
	a  = 0  #该属性为类属性

1.2 类属性的特点
a. 类属性可以被类对象和实例对象访问
b. 类属性可以通过类对象修改,但无法通过实例对象修改

class Animal():
	a  = 0 
k = Animal()
Animal.a
k.a

2.1 什么是实例属性
通过实例对象定义的属性就是实例属性

2.2 实例属性的特点
实例属性只能通过实例对象访问和修改,不能通过类对象访问和修改

class Animal():
	def __init__(self,name)
		self.name = name   # 该属性为实例属性
d = Animal('dog')
print(d.name)      #通过实例对象访问实例属性

2.方法的分类:类方法和实例方法
2.1 什么是实例方法
在类中小括号里第一个参数为self的方法即为实例方法

2.2 实例方法的特点
a. 实例方法可以通过实例对象去调用

b.实例方法可以通过类对象调用,但必须传入相应的实例对象

python
class Animal():
	def gender(self):
		print('hello')
d = Animal()
Animal.gender(d)       #通过类对象调用实例方法时需要传入实例对象

c.实例方法小括号第一个参数是self,代表实例对象

2.3 什么是类方法
在类的内部使用装饰器@classmethod来修饰的方法就是类方法

2.4 类方法的特点:
a.类方法可以通过类对像和实例对象调用

b.类方法的第一个参数是cls,也会自动传递,cls表示当前的类对象

class Animal():
    def gender(self):
        print('hello')

    @classmethod
    def fkn(cls):
        print('nice to meet you')
d = Animal()
d.fkn()
Animal.fkn()

七.静态方法

1.什么是静态方法
在类中以@staticmethod 来修饰的方法称为静态方法

2.静态方法的特点
1.静态方法小括号里不需要传入self 和cls

2.静态方法可以被类对象调用,也可以被实例对象调用

class Animal():
    def gender(self):
        print('hello')

    @classmethod
    def fkn(cls):
        print('nice to meet you')
    @staticmethod
    def text():
        print('小朋友好')
d = Animal()
Animal.text()    #静态方法被类对象调用
d.text()         #静态方法被实例对象调用

八.总结

面向对象的三大特性:
1.封装:确保数据的安全性
2.继承:可实现对象的功能可拓展性
3.多态:保证程序的灵活性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值