码迷,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
迷上了代码!