首页 >

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

后端开发|Python教程实例详解Python面向对象的四大特征
python
后端开发-Python教程
免费cms系统源码,vscode打开c项目,ubuntu启动win7,tomcat 集群部署,sqlite 备注方式,网页设计行业前景,config连接数据库,服务器 iis ftp,帝国cms评分插件,前端流行3D框架,爬虫设置,php 添加数组,广州seo顾问,di springboot,语义化标签的优势,单页导航网站源码,打开php网页变成下载,投票页面html模板,dedecms后台打开空白,登陆页面源码,固定资产管理系统设计,网格划分程序lzw
python视频教学
视频购物网源码,ubuntu 显示桥接,如何运行tomcat服务器,python数据爬虫实战,php如何调用图片并显示图片,seo 杭州 集群lzw
1.抽象
贷款网站源码html,vscode 双击全屏,ubuntu 11.10 安装,nio tomcat,sqlite 字符位置,2016网页设计宽度,锋云主机 数据库,主机屋云服务器怎么样,dedecms评分插件,前端框架angular入门,爬虫 大众点评,php 数组下标,北海seo,重写springboot,常用html标签代码,程序员软件下载网站,创意网页模板下载,登入注册界面模板,discuz 后台登陆,bootstrap注册页面模板,asp生产管理系统,js语音聊天程序lzw
抽象是隐藏多余细节的艺术。在面向对象的概念中,抽象的直接表现形式通常为类。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):    passc = 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):        passclass C(A):    def __init__(self):        pass    def save(self):        print("This is from C")class D(B,C):    def __init__(self):        passfun = D()fun.save()

python视频教学


  • 暂无相关文章
  • Posted in 未分类