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

__str__和__repr__

时间:2020-12-31 12:29:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:eva   基础上   运算   比较   倚天   操作   repr   ctr   block   

__str__和__repr__的用法

(1) python中,以双下划线开头、双下划线结尾是系统定义的成员,
__str__函数:将对象转换成字符串(对人友好),一般是打印对象时候用
__repr__函数:将对象转换成字符串(解析器可以识别),一般是拷贝对象时候用
快捷键 Ctrl + o

class Dog():
    def __init__(self, name=None, age=None, weight=None):
        self.name = name
        self.age = age
        self.weight = weight

    # 打印对象时候会调用__str__方法
    
    def __str__(self):
        return f"我是一个狗class"

    def __repr__(self) -> str:
        return ‘Dog("%s", "%s", "%s")‘ %(self.name, self.age, self.weight)


d1 = Dog(‘石头‘, 15, 70)
print(d1)

# 将字符串作为代码执行
# eval(字符串),把字符串当做成python执行
d2 = eval(d1.__repr__())
print(d2)

(2)运算符重载

定义:让自定义类生成对象(实例)能够使运算符进行操作,派python默认是没有加减乘除

__add__	加
__sub__	减
__mul__	乘
__truediv__	除
__floordiv__  整除

+=对于可变对象,在原有基础上进行修改,对应函数__add__
+=对于不可变对象,创建新对象,对饮函数__iadd__
is 运算符:比较地址是否相同
== 运算符:比较内容是否相同

(3)自定义对象列表

如果需要使用内置函数就需要重写比较运算符

__eq__ 对象相同依据(开发中常用)
__lt__对象大小依据

class Commodity:
    def __init__(self, cid=None, name=None, price=None):
        self.cid = cid
        self.name = name
        self.price = price

    def __eq__(self, other):
        return self.cid == other.cid

    def __lt__(self, other):
        return self.cid < other.cid


commodity_list_info = [
    Commodity(1001, ‘倚天剑‘, 5000),
    Commodity(1001, ‘倚天剑‘, 5000),
    Commodity(1002, ‘屠龙刀‘, 6000),
    Commodity(1003, ‘小李飞刀‘, 7000),
]

# 找出cid是1002的小标位置
# 列表里面可以只写类名称,而不是实例名称
print(commodity_list_info.index(Commodity(1002)))

# 统计cid是1001个数
print(commodity_list_info.count(Commodity(1001)))

# 根据cid大小排序,实例排序依赖__lt__魔术方法
print(commodity_list_info.sort())

# 判断cid为1005商品是否在商品列表藜麦
print(Commodity(1005) in commodity_list_info)

# 移除列表里面元素,把cid是1003商品移除,这个也是调用__eq__
print(commodity_list_info.remove(Commodity(1003)))

# 获取cid最大值
print(max(commodity_list_info).__dict__)

__str__和__repr__

标签:eva   基础上   运算   比较   倚天   操作   repr   ctr   block   

原文地址:https://www.cnblogs.com/Hi-Son/p/14194932.html

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