文档章节

Python基础-面向对象-方法

ZHAO_JH
 ZHAO_JH
发布于 2018/04/11 15:44
字数 1179
阅读 13
收藏 1

控制输出

__str__()

自定义控制信息

# -*- coding:utf8 -*-
class Text1:                                #定义类1
    pass
class Text2:                                #定义类2
    def __str__(self):                      #定义自制对象显示方式
        return "这是自定制的对象显示方式!" #返回显示方式
P1 = Text1()                                #实例化1
P2 = Text2()                                #实例化2
print(P1)                                   #查看实例化对象1
print(P2)                                   #查看实例化对象2
<__main__.Text1 object at 0x0000020055563710>
这是自定制的对象显示方式!

__repr__()

自定义控制信息

# -*- coding:utf8 -*-
if __name__ == '__main__':
    class Text1:                                #定义类1
        pass
    class Text2:                                #定义类2
        def __repr__(self):                     #定义自制对象显示方式
            return "132" #返回显示方式
P1 = Text1()                                #实例化1
P2 = Text2()                                #实例化2
print(P1)                                   #查看实例化对象1
print(P2)                                   #查看实例化对象2
<__main__.Text1 object at 0x000001752F213710>
这是自定制的对象显示方式!

__format__()

格式化控制输出

# -*- coding:utf8 -*-
#指定格式字典
format_dic={
    'ymd':'{0.year}{0.mon}{0.day}',
    'm-d-y':'{0.mon}-{0.day}-{0.year}',
    'y:m:d':'{0.year}:{0.mon}:{0.day}'
}
class Date:                                 #定义格式类
    def __init__(self,year,mon,day):        #初始化函数
        self.year=year
        self.mon=mon
        self.day=day
    def __format__(self, format_spec):      #定义格式
        if not format_spec or format_spec not in format_dic:    #判断是否符合格式
            format_spec='ymd'               #指定默认格式
        fm=format_dic[format_spec]          #调取格式类型
        return fm.format(self)              #返回格式类型
d1=Date(2016,12,26)                         #实例化
print(format(d1,'ymd'))                     #实例化输出1
print(format(d1,'y:m:d'))                   #实例化输出2
print(format(d1,'m-d-y'))                   #实例化输出3
20161226
2016:12:26
12-26-2016

raise

抛出异常,实现菲波那切数列

# -*- coding:utf8 -*-
class Text:                                         #定义类
    def __init__(self):                   #初始化函数
        self.A = 1
        self.B = 2
    def __iter__(self):                             #迭代转换
        return self
    def __next__(self):                             #定义迭代方法
        if self.A > 100:
            raise StopIteration("程序终止!")       #判断方法抛出异常终止程序
        self.A,self.B = self.B,self.A + self.B      #迭代方法
        return self.A                               #返回值
Num = Text()                                        #实例化
for i in Num:                                       #for循环迭代
    print(i)
2
3
5
8
13
21
34
55
89
144

类变量

变量值可以是列表、元组、迭代对象、字符串等,一般实例很多但数据较少时候用来替代类字典而达到节省内存提升运行速度的效果.可以理解为内存优化的工具。

__slots__

一般用于不长修改,但长使用多实例化的特殊场景

class Text:
    __slots__ = ['name','age']
P = Text()

P.name = '小明'
P.age = '18'
print(P.name,"已经",P.age,"了")

P.name = '小黑'
P.age = '9'
print(P.age,'岁的',P.name,'还很淘气~')
小明 已经 18 了
9 岁的 小黑 还很淘气~

析构方法

__del__()

# -*- coding:utf8 -*-
class Animal:                                   #定义类
    def __init__(self,species,name):            #定义属性
        self.Species = species
        self.Name = name
    def dynamic(self):                          #定义方法
        print("%s是%s动物" %(self.Name,self.Species))
    def __del__(self):
        print(del_methods,"内存回收触发!")
P = Animal("猫科","老虎")                       #实例化
del_methods = P.Name
print(P.__dict__)                               #删除前字典
del P.Name                                      #删除属性
print(P.__dict__)                               #删除后字典
{'Species': '猫科', 'Name': '老虎'}
{'Species': '猫科'}
老虎 内存回收触发!

实例执行

__call__

对象后边加括号,触发执行

class Text:
    def __call__(self, *args, **kwargs):
        print("This is test !!!")
P = Text()
P()
This is test !!!

上下文管理协议

  • 没有异常的情况下,整个代码块运行晚班后去触发__exit__,它的三个参数都None
  • 没有异常的情况下,从异常出现的位置直接触发__exit__,__exit__返回值为True,吞掉异常。反之吐出异常

__enter__ & __exit__

with触发__enter__,with的返回值触发__exit__

# -*- coding:utf8 -*-
class Text:                                             #定义测试类
    def __init__(self,name):                            #初始化函数
        self.Name = name
    def __enter__(self):                                #定义程序开始执行
        print("程序开始执行!")
        return self                                     #返回默认值
    def __exit__(self, exc_type, exc_val, exc_tb):      #定义程序结束执行(异常类,异常值,追踪信息)
        print("程序执行完毕!")
with Text("测试") as f:                                 #实例化返回对象,赋值相当于 f=Text('测试')
    print(f.Name)                                       #实例化内容打印
    print("这是一个测试程序!!!")

程序开始执行!
测试
这是一个测试程序!!!
程序执行完毕!

__exit__ 简单异常处理

# -*- coding:utf8 -*-
class Text:                                             #定义测试类
    def __init__(self,name):                            #初始化函数
        self.Name = name
    def __enter__(self):                                #定义程序开始执行
        print("程序开始执行!")
        return self                                     #返回默认值
    def __exit__(self, exc_type, exc_val, exc_tb):      #定义程序结束执行(异常类,异常值,追踪信息)
        print("程序执行完毕!")
        return Text                                     #程序异常直接(吃异常)跳过且不执行异常后的代码
with Text("测试") as f:                                 #实例化返回对象,赋值相当于 f=Text('测试')
    print(f.Name)                                       #实例化内容打印
    print("这是一个测试程序!!!")
    print(A)                                            #打印不存在内容模拟程序异常
    print("with异常代码下的程序是不执行的~")
程序开始执行!
测试
这是一个测试程序!!!
程序执行完毕!

© 著作权归作者所有

ZHAO_JH
粉丝 17
博文 203
码字总数 182453
作品 0
宝山
运维
私信 提问
Python零基础从入门到精通 2天集训营

主办方: 有用教育(上海荣隆教育科技有限公司)是一家专业培养资深IT工程师并让学员高薪就业、专注于Python开发、AI人工智能的教育机构,公司总部设立在上海,为IT人员提供到岗即用式的实战培...

有用教育
05/13
13
0
不要用面向对象编程分散新手程序员的注意力

来源:Ackalrix博客【http://www.ackarlix.com】 编者按:原文作者James Hague是一位修复性程序员(recovering programmer),从上世纪80年代起开始设计视频游戏,属于发烧友级别,用汇编语言...

Ackarlix
2011/03/30
317
1
Python是面向对象的语言吗?python编程

  Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写...

老男孩Linux培训
2018/06/08
8
0
Python - 进阶(持续更新 ing)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/qq39437555/article/details/93867588 文章目录 Python - 面向对象 ...

桃子味儿的汽水~
08/23
0
0
Python36讲零基础速成班

主办方: 有用教育(上海荣隆教育科技有限公司)是一家专业培养资深IT工程师并让学员高薪就业、专注于Python开发、AI人工智能的教育机构,公司总部设立在上海,为IT人员提供到岗即用式的实战培...

有用教育
05/08
4
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊nacos config的deleteConfig

序 本文主要研究一下nacos config的deleteConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@Re......

go4it
昨天
4
0
面试:原来Redis的五种数据类型底层结构是这样的

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在Redis中会涉及很多数据结构,比如SDS,双向链表、字典、压缩列表、整数集合等等。Redis会基于这些数据结构自定义一个对象系统...

ccww_
昨天
5
0
java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
昨天
10
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部