站长家园(原代码之家)(www.adminjie.com)网站源码,微信源码,游戏源码,商业源码分享平台。
当前位置:网站首页 技术文章 网络编程 正文

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

时间:2022-05-27 [网络编程]作者:fabuyuan 浏览:7 次

本篇文章给大家带来了关于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面向对象的四大特征的详细内容,更多请关注站长家园其它相关文章!

本文标签:  python

转载请注明来源:实例详解Python面向对象的四大特征

本文永久链接地址:https://www.adminjie.com/post/12838.html

免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。

  • 站长家园(原代码之家)会员升级
  • 最新文章
    • mysql怎么查询第一条数据

      mysql怎么查询第一条数据

      在mysql中,可以使用SELECT语句配合LIMIT子句来查询第一条数据,语法为“SELECT*|字段名列表FROM表名LIMIT0,1;”。LIM...

    • mysql中not null是索引吗

      mysql中not null是索引吗

      “notnull”不是索引而是非空约束,用于指定字段的值不能为空;对于使用了非空约束的字段,如果添加数据时没有指定值,则会报错。设置非空约束的两种方法:1、建...

    • mysql如何增加唯一索引

      mysql如何增加唯一索引

      三种增加方法:1、使用“CREATEINDEX”语句增加,语法“CREATEUNIQUEINDEX索引名ON表名(列名列表);”;2、建表时增加,语...

    • mysql怎么统计查询结果

      mysql怎么统计查询结果

      在mysql中,可以使用COUNT()函数来统计查询结果;该函数用于统计查询结果的行数,返回表中符合特定条件的记录行数。COUNT()函数有三种语法:1、“CO...

    • mysql怎么查询第几条数据

      mysql怎么查询第几条数据

      查询第几条数据的方法:使用SELECT语句配合LIMIT子句来查询,语法“SELECT*|字段名列表FROM表名LIMIT初始位置,记录数;”或“SE...

    热门文章