• 技术文章 >后端开发 >Python教程

    实例详解Python面向对象的四大特征

    长期闲置长期闲置2022-05-26 11:58:51转载120
    本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于面向对象的相关内容,面向对象的四个特征包括抽象、封装、继承和多态,下面一起来看一下,希望对大家有帮助。

    推荐学习:python视频教程

    1.抽象

    抽象是隐藏多余细节的艺术。在面向对象的概念中,抽象的直接表现形式通常为类。Python基本上提供了面向对象编程语言的所有元素,如果你已经至少掌握了一门面向对象语言,那么利用Python进行面向对象程序设计将会相当容易。

    忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.( 就是把现实世界中的某一类东西, 提取出来, 用程序代码表示, 抽象出来的一般叫做类或者接口).

    抽象并不打算了解全部问题, 而是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一个数据抽象,二是过程抽象.

    数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)

    过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)

    2.封装

    面向对象的程序设计中,某个类把所需要的数据(也可以说是类的属性)和对数据的操作(也可以说是类的行为)全部都封装在类中,分别称为类的成员变量和方法(或成员函数)。这种把成员变量和成员函数封装在一起的编程特性称为封装。

    2.1公有成员变量和私有成员变量

    Python中用成员变量的名字来区分是公有成员变量或者是私有成员变量。

    Python中,以两个下划线‘_ _’开头的变量都是私有成员变量,而其余的变量都属于公有成员变量。

    其中,私有的成员变量只能在类的内部访问,而共有的公有的成员变量可以在类的外部进行访问。

    2.2公有方法和私有方法

    类的方法是对类行为的封装。

    类的方法也分为公有方法和私有方法。

    类的私有方法只能通过对象名(在类内部也就是self)在类的内部进行访问。而公有方法可以在类的外部通过对象名进行访问。同样,公有的成员方法和私有的成员方法也是通过名字来区分的,双下划线‘__’开头的方法是私有成员方法。

    私有方法:只能在类的内部进行访问,对象无法访问。

    私有属性: 提高代码安全性,不允许别人随意修改

    class Test(object):
        #私有方法
        def __test2(self):
            print("私有方法,__test2")
        #普通方法
        def test(self):
            print("普通方法test")
        #普通方法
        def _test1(self):
            print("普通方法_test1方法")
            #在类内部调用私有方法
            #t.__test2()
            self.__test2()
    t = Test()
    t.test()
    t._test1()
    #t.__test2() #调用时会报错

    #私有方法应用场景--发短信

    #私有方法应用场景--发短信
    class Test:
        #核心私有方法,用于发送短信
        def __sendMsg(self):
            print("---正在发送短信---")
        #公共方法
        def sendMsg(self,newMoney):
            if newMoney>10000: #余额大于10000才可以调用发短信功能
                self.__sendMsg()
            else:
                print("抱歉,余额不足,请先充值!")
    t = Test()
    t.sendMsg(1000000000)
    #帐号不允许更改
    class Person(object):
        def __init__(self,name,sex):
            self.__name = name
            self.__sex = sex
        def getSex(self):
            return self.__sex
        def getName(self):
            return self.__name
        def setName(self,newName):
            if len(newName)>=5:
                self.__name = newName
            else:
                print("名字长度必须大于等于才可修改!")
    xiaoming = Person("hoongfu","男")
    print(xiaoming.getName())
    print(xiaoming.getSex())
    xiaoming.setName("xiaoming")
    print(xiaoming.getName())

    2.2.1 练习

    定义一个类Person,类中有私有方法和普通方法,私有属性和普通属性

    能通过普通方法调用私有方法,也能通过普通方法更改私有属性。

    class Test(object):
        def test(self):
            self.__sex = "保密"
            print("普通公有方法test")
            #调用私有方法
            self.__test1()
        def __test1(self):
            print("私有方法__test1")
            #调用私有属性
            print("私有属性__sex:",self.__sex)
    t = Test()
    t.test()

    3. 继承

    3.1继承的概念

    在程序中,继承描述的是事物之间的所属关系,例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物;同理,波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承狗

    #继承

    #继承
    class Animal(object):
        def eat(self):
            print("----吃----")
        def dirk(self):
            print("----喝----")
        def run(self):
            print("----跑----")
        def sleep(self):
            print("----睡觉----")
    class Dog(Animal):
        '''
        def eat(self):
            print("----吃----")
        def dirk(self):
            print("----喝----")
        def run(self):
            print("----跑----")
        def sleep(self):
            print("----睡觉----")
        '''
        def call(self):
            print("旺旺叫...")
    class Cat(Animal):
        def catch(self):
            print("抓老鼠....")
    dog = Dog()
    dog.call()
    dog.eat()
    tom = Cat()
    tom.catch()
    tom.sleep()

    #多继承

    #多继承
    class Animal(object):
        def eat(self):
            print("----吃----")
        def dirk(self):
            print("----喝----")
        def run(self):
            print("----跑----")
        def sleep(self):
            print("----睡觉----")
    class Dog(Animal):
        def call(self):
            print("旺旺叫...")
    class XiaoTq(Dog):
        def fly(self):
            print("----飞喽-------")
    xtq = XiaoTq()
    xtq.fly()
    xtq.call()
    xtq.eat()
    class Cat(object):
        def __init__(self,name,color="白色"):
            self.name = name
            self.color = color
        def run(self):
            print("%s -- 在跑"%self.name)
    class Bosi(Cat):
        def setName(self,newName):
            self.name = newName
        def eat(self):
            print("%s -- 在吃"%self.name)
    bs = Bosi("印度猫")
    print(bs.name)
    print(bs.color)
    bs.eat()
    bs.setName("波斯猫")
    bs.run()

    3.2重写父类方法与调用父类方法

    所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法.

    使用super调用父类的方法:可以直接调用父类方法,不需要通过 父类名.父类方法名 的方式

    class Cat(object):
        def sayHello(self,name):
            print("hello---1")
    class Bosi(Cat):
        def sayHello(self):
            print("hello---2")
            #Cat.sayHello(self)
            super().sayHello("Zhangsan")
    bs = Bosi()
    bs.sayHello()

    3.3多继承

    多继承举例:

    class Base(object):
        def test(self):
            print("----Base-----")
    class A(Base):
        def test(self):
            print("----test1-----")
    class B(Base):
        def test(self):
            print("----test2-----")
    class C(A,B):
        pass
    c = C()
    c.test()
    print(C.__mro__) #可以查看C类的搜索方法时的先后顺序

    4.多态

    4.1多态的定义

    所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。

    多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。

    当子类和父类都存在相同的print_self()方法时,我们说,子类的print_self()覆盖了父类的print_self(),在代码运行的时候,总是会调用子类的print_self()。这样,我们就获得了继承的另一个好处: 多态。

    class Dog(object):
        def printSelf(self):
            print("大家好,我是xxx,请大家多多关照!")
    class XiaoTq(Dog):
        def printSelf(self):
            print("Hello,ereybody,我是你们的老大,我是哮天神犬!")
    
    #定义一个执行函数
    def exec(obj):
    
        """
    
        #定义时的类型并不知道要调用哪个类的方法,
    
        当运行时才能确定调用哪个类的方法,这种情况,我们就叫做多态
    
        """
    
        obj.printSelf()
    dog = Dog()
    exec(dog)
    xtq = XiaoTq()
    exec(xtq)

    4.2新式类和经典类的区别

    新式类都从 object 继承,经典类不需要

    Python 2.x中默认都是经典类,只有显式继承了object

    Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object

    #新式类和经典类的区别
    
    class A:
        def __init__(self):
            print('a')
    class B(A):
        def __init__(self):
            A().__init__()
            print('b')
    b = B()
    print(type(b))
    class A():
        def __init__(self):
            pass
        def save(self):
            print("This is from A")
    class B(A):
        def __init__(self):
            pass
    class C(A):
        def __init__(self):
            pass
        def save(self):
            print("This is from C")
    class D(B,C):
        def __init__(self):
            pass
    fun = D()
    fun.save()

    推荐学习:python视频教程

    以上就是实例详解Python面向对象的四大特征的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:python
    上一篇:简单学习Python字符和列表(实例详解) 下一篇:Python数据分析之concat与merge函数(实例详解)
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• python数据分析之pandas搞定Excel表格• Python模块化整理和第三方模块的安装(总结分享)• Python多进程知识点总结• 详细介绍python的numpy模块• 介绍六个超好用的Python内置函数
    1/1

    PHP中文网