一、面向对象编程三大特征
Python是面向对象的语言,同样支持面向对象的编程的三大特征:继承,封装,多态。
封装是指隐藏对象的属性和实现细节,只对外提供必要的一些方法,私有属性,私有方法是实现封装地 一些方法。
继承是实现代码重用的方法,可以极大避免代码的重用,同时还可以在继承的基础上进行重构。
多态可以按字面意思理解为“多种状态”,在编程中是指一个方法调用但是由于对象不同而产生的不同结果。
三、继承
语法格式
Class 子类类名(父类)
类体
如果在类定义中没有指定父类,则默认父类是object 类。也就是说,object 是所有类的父
类。
如果定义子类时,有多个父类,也叫多继承。
class Student:
# 定义基本属性
n = 'Bob'
a = 0
# 定义私有属性,私有属性在类外部无法直接进行访问
__w = 0
# 定义构造方法
def __init__(self, n, a, w):
self.n = n
self.a = a
self.__w = w
def know(self):
#类内部可以直接调用
print('my weight is: ',Student.__w )
print("%s say: I’m %d years old。" % (self.n, self.a))
#继承于父类Student, People也叫做子类
class People(Student):
t = ''
def __init__(self, n, a, w, t):
self.t = t
#定义父类的构造函数
Student.__init__(self, n, a, w)
def know(self):
print("%s say: I’m %d years old and %d cm。" % (self.n, self.a, self.t))
my = People('王二', 18 , 55,175)
my.know() #调用定义方法
运行结果:
王二 say: I’m 18 years old and 175 cm。
上面的例子中包含了成员继承和方法重写,成员继承是指子类继承了父类除构造方法之外的所有成员。方法重写是指子类重新定义父类中的方法,这样就会覆盖父类的方法。
多重继承
ython 支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,python从左至右搜索。
class Aa:
def ab(self):
print(1234567)
class Bb:
def ab(self):
print(7654321)
class Cc(Bb, Aa):
def cc(self):
print('嗯哼')
class Dd(Aa, Bb):
def dd(self):
print('嗯哼')
c = Cc()
c.ab()
d = Dd()
d.ab()
输出结果:
7654321
1234567
从结果我们可以知道执行了Bb类中的方法,因为父类中方法相同且没有指定父类,从左到右,会先去执行最左面类中的方法。
三、多态
1. 多态是方法的多态,属性没有多态。
2. 多态的存在有2 个必要条件:继承、方法重写。
class Name:
def say(self):
print(" I will introduce myself")
class Mary(Name):
def say(self):
print("I'm Mary")
class Bob(Name):
def say(self):
print("My name is Bob")
def say_name(a):
if isinstance(a,Name):
a.say() #传入的对象不同,shout方法对应的实际行为也不同。
say_name(Mary())
say_name(Bob())
输出结果:
I'm Mary
My name is Bob
这里用到了isinstance函数,简单介绍一下。Isinstance属于python的内置函数,它是用来判断一个对象是否是一个已知的类型。
isinstance(object, classinfo)
object -- 实例对象。
classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
在isinstance(a,Name)中,a代表实例对象。Name表示类名。
四、运算符重载
让自定义的类生成的对象(实例)能够使用运算符进行操作
格式:
def __xx__(self,other):
语句块
class S:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'S(%d, %d)' % (self.a, self.b)
def __add__(self, other):
return S(self.a + other.a, self.b + other.b)
a = S(1, 3)
b = S(1, -4)
print(a + b)
输出结果:
V(2, -1)