Python进阶-----通过类的内置方法__str__和__repr__自定制输出(打印)对象时的字符串信息

__str__方法其实是在print()对象时调用,所以可以自己定义str字符串显示信息,在该方法return一个字符串,如果不是字符串则报错
print(obj) 等同于-->str(obj) 等同于-->obj.__str__

#未自定__str__信息
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age

f = Foo(‘Menawey‘,24)
print(f)   #<__main__.Foo object at 0x000002EFD3D264A8>  因为没有定制__str__,则按照默认输出

#自定__str__信息
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return ‘名字是%s,年龄是%d‘%(self.name,self.age)

f1 = Foo(‘Meanwey‘,24)
print(f1)           #名字是Meanwey,年龄是24
s = str(f1)         #---> f1.__str__
print(s)            #名字是Meanwey,年龄是24

__repr__方法是在控制台直接输出一个对象信息或者print一个对象信息时调用,如果自定了__str__信息,print时默认执行__str__
如果没有自定__str__,则print时执行__repr__

#未自定__str__信息,自定了__repr__
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __repr__(self):
        return ‘来自repr-->名字是%s,年龄是%d‘%(self.name,self.age)

f2 = Foo(‘Meanwey‘,24)
print(f2)               #来自repr-->名字是Meanwey,年龄是24   因为没有自定__str__,则执行__repr__

#自定了__str__信息,自定了__repr__
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return ‘来自str-->名字是%s,年龄是%d‘%(self.name,self.age)

    def __repr__(self):
        return ‘来自repr-->名字是%s,年龄是%d‘%(self.name,self.age)

f2 = Foo(‘Meanwey‘,24)
print(f2)               #来自str-->名字是Meanwey,年龄是24   因为自定了__str__,则print时不会执行__repr__

原文地址:https://www.cnblogs.com/Meanwey/p/9788843.html

时间: 2024-08-03 06:25:24

Python进阶-----通过类的内置方法__str__和__repr__自定制输出(打印)对象时的字符串信息的相关文章

Python进阶-----通过类的内置方法__format__自定制格式化字符串

__format__方法可以自定格式化字符串,不定义的话会执行默认格式format(obj) 等同于--> obj.__format__ format_dic = { 'y-m-d':'{obj.year}-{obj.mon}-{obj.day}', 'd/m/y':'{obj.day}/{obj.mon}/{obj.year}' } class Date: def __init__(self,year,mon,day): self.year = year self.mon = mon self

Python进阶之浅谈内置方法

目录 有序or无序和可变or不可变 数字类型内置方法 整形 浮点型 字符串类型内置方法 有序or无序和可变or不可变 有序:有索引 无序:无索引 可变:变量值变,id不变 不可变:变量值变,id也变 数字类型内置方法 整形 1.作用 描述年龄,id,身高 2.定义方式 x=10 x=int('10') 3.内置方法 没有内置方法,只有算术运算和比较运算 4.存在一个值还是多个值 一个值 5.有序or无序 整形没有这一说法 6.可变or不可变 整形是不可变的 浮点型 1.作用 描述薪资等 2.定义

python之反射和内置函数__str__、__repr__

一.反射 反射类中的变量 反射对象中的变量 反射模块中的变量 反射本文件中的变量 1.定义:使用字符串数据类型的变量名 来获取这个变量的值 例如: name = 'xiaoming' print(name) # xiaoming print('name') # name 平时我们要想获取'xiaoming'这个值,要用name去获取,但是如果想用字符串'name' 获取这个值呢, 就需要用到反射. 2.反射应用的场景(就是把接收的字符串转换成变量的名字便于使用) 1,input 用户输入的如果是

类的属性、类的方法、类的内置方法

类的属性 变量在类中称为类的属性,函数在类中称为类的方法,类的属性分为以下几种: (1) 公有属性:在类中和类外都能调用的属性,定义的时候与变量的定义一致,如 color = 'yellow'(2) 私有属性:不能在类外及被类以外的函数调用,定义的时候以双下划线开头,如__color = 'yellow' (3) 内置属性: 由系统在定义类的时候默认添加的,定义的时候以前后双下划线构成,如 dict #!/usr/bin/env python class People(object): colo

面向对象:类的内置方法

__str__和__repr__:实例化一个对象,该对象的返回值是一个指向这个类的内存地址 class A: pass a = A() print(a) #打印: <__main__.A object at 0x000001FA526DA108> 自定义__str__和__repr__方法: class Func: pass def __str__(self): return '我是自定义的str' def __repr__(self): return '我是自定义的repr' a = Fun

几个类的内置方法

# 类的内置方法 # 双下方法 # __str__ # 当类中定义了__str__方法后,print(这个类对象时),会调用__str__. 或者格式化%s输出对象时,都会触发__str__ # __repr__ # 当类中定义了__repr__方法后,print(repr(a)),就会调用a对象中的__repr__()方法.格式化输出用%r时同样会调用__repr__ # 同样对象中如果没有定义__repr__方法,那么就会调用父类中的__repr__ # __repr__是__str__的备

类的内置方法(魔法方法)

''' 类的内置方法(魔方方法): 凡是在类内部定义的,__开头__结尾的方法,都是类的内置方法,也称为魔法方法 类的内置方法,会在某种条件满足下自动触发. __new__:在__init__触发前,自动触发.调用该类时,内部会通过__new__来产生一个新的对象. __init_:在调用类时自动触发.通过__new__产生的对象自动调用__init__. ''' class Demo(object): def __new__(cls, *args, **kwargs): print('from

Python之基本数据类型及内置方法

Python之基本数据类型及内置方法 数字类型 整型 1.作用 年龄/id 2.定义方式 x = 10 3.使用方法 + - * / % // ** < <= > >= == != 4.有序or无序 有索引的就有序,无索引的就无序 压根就没有有序无序一说 5. 可变or不可变 值变id不变叫可变,值不变id变叫不可变 整型不可变 x = 10 print(id(x)) x += 1 print(id(x)) 浮点型 1.作用 薪资 2.定义方式 x = 10.1 3.使用方法 +

python 类中内置方法的重写

为达成目的,经常会在类中将一些内置方法进行重写,最常见的例如__setattr__,下面就通过内置属性,来查看重写会带来什么变化 先定义一个测试用的类,代码如下 class base: def __init__(self): pass inspect.getmembers(base): # 查看内置属性 打印结果如下 ('__class__', <class 'type'>) ('__delattr__', <slot wrapper '__delattr__' of 'object'