zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    hdu 1998 奇数阶魔方(找规律+模拟)
    巧用百度Site App新组件为企业官网打造移动站
    POJ 1276 Cash Machine
    Unity3D中使用MiniJson解析json的例子
    设计模式读书笔记-----单例模式
    android 常用资料
    Objective-C之run loop详解
    icon 图标下载
    揭开Html 标签的面纱,忘不了的html .
    12157
  • 原文地址:https://www.cnblogs.com/clearlie/p/13182387.html
Copyright © 2011-2022 走看看