08-Python面对对象进阶

面向对象编程三大特征

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: Im  18 years old and 175 cm

上面的例子中包含了成员继承和方法重写,成员继承是指子类继承了父类除构造方法之外的所有成员。方法重写是指子类重新定义父类中的方法,这样就会覆盖父类的方法。

多重继承

python 支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,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 V:

    def __init__(self, a, b):

        self.a = a

        self.b = b


    def __str__(self):

        return 'V(%d, %d)' % (self.a, self.b)
 

    def __add__(self, other):

        return V(self.a + other.a, self.b + other.b)


a1 = V(1, 3)

a2 = V(1, -4)

print(a1 + a2)

 

结果:

V(2, -1)

 

posted @ 2020-06-23 15:38  呆呆的clearlie  阅读(129)  评论(0编辑  收藏  举报