函数重写
程序员文章站
2022-05-07 13:03:09
...
基本概念
定义:
在自定义的类内部添加相应的方法,让自定义的类创建的实例能够使用内建函数进行操作
对象转字符串函数:
repr(x) 返回一个能表示python 对象的表达式字符串,通常eval(repr(obj)) == obj
str(x) 通过给定的对象返回一个字符串(这个字符串通常供人阅读)
实例:
s = "I'mStudent"
print(str(s)) # I'mTeacher
print(repr(s)) # 'I\'mTeacher'
对象转字符串函数的重写方法:
repr() 函数的重写方法:
del __repr__(self):
return 字符串
str() 函数的重写方法:
del __str__(self):
return 字符串
str(obj) 函数调用方法说明:
1.str(obj) 函数先查找obj.__str__(方法),调用此方法并返回结果
2.如果obj.__str__()方法不存在,则调用obj.__repr__()方法并返回结果
3.如果obj.__repr__方法不存在,则调用object类的__repr__实例方法显示
<__main__.XXXX object at 0xXXXXXXXX>格式的字符串
示例:
class MyNumber:
def __init__(self, val):
self.data = val # 在每个对象内部都创建一个实例变量来绑定数据
def __str__(self):
return "自定义数字%d" % self.data
def __repr__(self):
'''此方法返回的字符串一定是能表示self对象的表达式字符串'''
return "MyNumber(%d)" % self.data
n1 = MyNumber(100)
print(n1) # 在print()内部会将n1用str(x)转为字符串再写到sys.stdo
print('str(n1) =', str(n1)) # 自定义的数字:100
print('repr(n1) =', repr(n1)) # MyNumber(100)
内建函数重写:
方法名 函数名
def __abs__(self): abs(obj) 函数调用
def __len__(self): len(obj) 函数调用
def __reversed__(self): reversed(obj) 函数调用
def __round__(self): round(obj) 函数调用
实例:
class MyList:
def __init__(self, iterable=()):
self.data = [x for x in iterable]
def __repr__(self):
return "MyList(%s)" % self.data
def __len__(self):
return len(self.data)
def __abs__(self):
# L = []
# for i in self.data:
# L.append(abs(i))
# return "MyList(%s)" % L
return MyList([abs(x) for x in self.data])
myl = MyList([1, -2, 3, -4])
print(len(myl))
print(abs(myl))
数值转换函数重写:
def __complex__(self): complex(obj) 函数调用
def __int__(self): int(obj)
def __float__(self): float(obj)
def __bool__(self): bool(obj)
实例:
class MyNumber:
def __init__(self, val):
self.data = val
def __repr__(self):
return "MyNumber(%d)" % self.data
def __int__(self):
return int(self.data)
def __float__(self):
return float(self.data)
n1 = MyNumber(100)
n = float(n1)
print(n)
布尔测试函数的重写:
格式:
def __bool__(self):
...
作用:
用于bool(obj)函数取值
用于if语句真值表达式中
用于while语句的真值表达式中
说明:
当自定义类内有__bool__(self)方法时,此方法的返回值为bool(x)的返回值
当不存在__bool__(self)方法时,返回__len__(self)方法的返回值是否为非零
来测试布尔值
当不存在__len__(self)方法时,则直接返回True
对象的属性管理函数:
getatrr(obj, name[, default])
从一个对象用字符串name得到对象的属性,getattr(x, 'y')等同于x, y;当属性不存在时,
如果给定default参数则返回default,如果没有给出default则触发一个AttributeError错误
hasattr(obj, name)
用给定的name字符串返回obj是否有此属性,此种做法可以避免在getattr(obj, name)时引发错误
setattr(obj, name, value)
给对象obj名为name的属性设置相应的值value,setattr(x, 'y', v)等同于 x.y = v
delattr(obj, name)
删除对象obj中的name属性del(x, 'y') 等同于 del x.y
上一篇: python BeautifulSoup设置页面编码的方法
下一篇: 项目里该不该用ORM?