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

python面向对象基础(三)内置方法 __xx__

时间:2019-02-15 11:52:03      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:col   注意   __del__   sch   image   class   自动   def   地址   

__str__和__repr__,__format__

改变对象的字符串显示__str__,__repr__

自定制格式化字符串__format__

 

#_*_coding:utf-8_*_

format_dict={
    ‘格式1‘:‘{obj.name}-{obj.addr}-{obj.type}‘,#学校名-学校地址-学校类型
    ‘格式2‘:‘{obj.type}:{obj.name}:{obj.addr}‘,#学校类型:学校名:学校地址
    ‘格式3‘:‘{obj.type}/{obj.addr}/{obj.name}‘,#学校类型/学校地址/学校名
}
class School:
    def __init__(self,name,addr,type):
        self.name=name
        self.addr=addr
        self.type=type

    def __repr__(self):
        return ‘School(%s,%s)‘ %(self.name,self.addr)
    def __str__(self):
        return ‘(%s,%s)‘ %(self.name,self.addr)

    def __format__(self, format_spec):
        # if format_spec
        if not format_spec or format_spec not in format_dict:
            format_spec=‘格式1‘
        fmt=format_dict[format_spec]
        return fmt.format(obj=self)

s1=School(‘oldboy1‘,‘北京‘,‘私立‘)
print(‘from repr: ‘,repr(s1))
print(‘from str: ‘,str(s1))
print(s1)

‘‘‘
str函数或者print函数--->obj.__str__()
repr或者交互式解释器--->obj.__repr__()
如果__str__没有被定义,那么就会使用__repr__来代替输出
‘‘‘
‘‘‘
注意:这三个方法的返回值必须是字符串,否则抛出异常
‘‘‘
print(format(s1,‘格式1‘))
print(format(s1,‘格式2‘))
print(format(s1,‘格式3‘))
print(format(s1,‘xxx‘))

技术图片

class B:

     def __str__(self):
         return ‘str : class B‘

     def __repr__(self):
         return ‘repr : class B‘


b=B()
print(‘%s‘%b)
print(‘%r‘%b)

技术图片

__del__

析构方:当对象在内存中被释放的同时自动触发执行该方法。

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

class Foo:

    def __del__(self):
        print(‘执行我啦‘)

f1=Foo()
del f1
# 执行我啦
print(‘------->‘)
f1
# NameError: name ‘f1‘ is not defined

item系列

__getitem__\__setitem__\__delitem__

 

python面向对象基础(三)内置方法 __xx__

标签:col   注意   __del__   sch   image   class   自动   def   地址   

原文地址:https://www.cnblogs.com/wqbin/p/10382750.html

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