标签:eva 基础上 运算 比较 倚天 操作 repr ctr block
(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__)
标签:eva 基础上 运算 比较 倚天 操作 repr ctr block
原文地址:https://www.cnblogs.com/Hi-Son/p/14194932.html