码迷,mamicode.com
首页 > 其他好文 > 详细

item系列及定制str、repr

时间:2019-10-06 13:29:34      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:code   返回值   ini   输出   img   年龄   elf   str   jin   

class Foo:
    def __getitem__(self, item):
        print(‘正在执行getitem‘,item)
        return self.__dict__[item]

    def __setitem__(self, key, value):
        print(‘正在执行setitem‘)
        self.__dict__[key] = value

    def __delitem__(self, key):
        print(‘正在执行delitem‘)
        self.__dict__.pop(key)

f1 = Foo()
print(f1.__dict__)
f1[‘name‘] = ‘jinling‘
print(f1.__dict__)
f1[‘age‘] = 19
print(f1[‘age‘])
print(f1.__dict__)
del f1[‘age‘]
print(f1.__dict__)

技术图片 

像上面这样实例化后以操作字典的方式增删查才可以实现

二、__str__ 及__repr__

可以自己定制str方法,控制打印的信息,由print 触发str

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return ‘名字是{} 年龄是{}‘.format(self.name,self.age)

f1 = Foo(‘jinling‘, 19)
print(f1)  # -->str(f1)-->f1.__str__()

技术图片  

__repr__是在python解释中触发

技术图片

当__str__ 与__repr__共存时

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return "print会触发这个哦"
    def __repr__(self):
        return ‘名字是{} 年龄是{}‘.format(self.name,self.age)

f1 = Foo(‘jinling‘, 19)
print(f1)  # -->str(f1)-->f1.__str__()

技术图片

如果__str__ 没有被定义, 那么就会使用__repr__来代替输出

注意:这俩方法的返回值必须是字符串,否则抛出异常

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    # def __str__(self):
    #     return "print会触发这个哦"
    def __repr__(self):
        return ‘名字是{} 年龄是{}‘.format(self.name,self.age)

f1 = Foo(‘jinling‘, 19)
print(f1)  # -->str(f1)-->f1.__str__()---->f1.__repr__()

技术图片  

  

item系列及定制str、repr

标签:code   返回值   ini   输出   img   年龄   elf   str   jin   

原文地址:https://www.cnblogs.com/dabai123/p/11626871.html

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