一.继承的简介
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.多态:保证程序的灵活性