码迷,mamicode.com
首页 > 编程语言 > 详细

23 Python - 面向对象编程OOP

时间:2019-07-05 21:08:49      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:成员变量   mamicode   获得   抛出异常   讲解   推荐   参数   dash   实例名   

面向对象编程OOP

01 方法__repr__()和__str__()

 __repr__()方法类似java中的toString方法,用于反馈类的相关信息且可以自己定义,一般用于开发人员控制台调试

__rept__()和__str__()方法区别

在控制台交互测试时:

输入b返回__rept__()方法结果

输入print(b) 返回__str__()方法结果,如果没有定义__str__()方法  则用__rept__()结果代替__str__()方法结果

       __rept__()   打印信息一般用于开发人员测试

__str__()    打印信息一般用于用户查看

 

例子:Book类定义

 技术图片

 

控制台交互

 技术图片

 

 

 

 

02 全局成员变量

在Python里面定义了一个属于类的成员(相当于Java中的静态变量用static修饰内容)、不属于实例的成员如例子中的count,即可以用类名调用,也可以用类的实例调用。这样比较乱,我们尽量不要用实例名调用。

 技术图片

 

如果真的用实例名引用了全局变量,那么实例名引用的即book3.count的count其实是属于book3的,该count如果发生改变只会影响book3的count,不会影响类Book的count,这么做很容易混淆,所以不推荐

 

 

03 类函数——理解为静态函数

类函数定义

类里面的函数:一部分是带有self,一部分没有带self,其中有self的一般都与实例相关,没有self一般与类相关与实例无关,有三种方式创建这种类函数即与实例无关只与类有关的函数。

 

方式1  python2传承下来——该方式不方便使用,可以忽略

函数定义

 技术图片

 

函数调用

 技术图片

 

 

 

方式2——python3里面的静态函数可以用该种方式

该方式与方式1的区别就是,定义类函数时候不要加参数,参数为空,但是会有提示错误信息,注意提示是编辑器提示的不是python语法提示, 所以千万不要根据提示输入参数,一定不要写self  这样写的目的就是该函数不让实例来调用,实现类函数的意义

 

 

对于类函数static_method()方法,红色波浪线的提示如下

 技术图片

 

对于该提示信息的解释如下

 技术图片

技术图片

 

 

 

 

方式3:用装饰器,也不建议加

加装饰器和不加的区别

加了就可以被实例调用了,但是不建议加,因为我们目的就是不让实例调用

       加的意义就是该函数本质上是与类相关的,不过加了装饰器之后既可以被类调用也可以被实例调用

在方法2的基础上,增加一个@staticmethod

 技术图片

 

函数调用

 技术图片

 

 

 

04 装饰器的简单讲解

例子:定义一个student类,用函数get_age()动态的获取学生的年龄

业务背景:下面定义了一个student,需要学生输入出生日期,但是现在想获得该学生的年龄,因为年龄是变化的,所以用函数get_age()动态的获取学生的年龄

定义一个student类,用函数get_age()动态的获取学生的年龄

 技术图片

 

结果

技术图片

 

 

 

 

例子:刚才上面例子里面定义的是函数get_age(),下面例子里面用装饰器代替函数

       其实装饰器本身就是函数,只不过使用起来更像字段

 技术图片

 

用装饰器的好处,我们可以进一步过滤,比如说我们让这个年龄不允许赋值,不允许删除,下面用设置器和删除器实现了不允许赋值和不允许删除的功能,会抛出异常

 技术图片

 

调用赋值会抛异常

 技术图片

 

23 Python - 面向对象编程OOP

标签:成员变量   mamicode   获得   抛出异常   讲解   推荐   参数   dash   实例名   

原文地址:https://www.cnblogs.com/yijiexi/p/11140543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!