python【系列教程】之类的特殊方法
【摘要】 一、常见的特殊方法
# 重写__repr__方法(相当于java中的toString方法)class Dog: name = '' age = 0 def __repr__(self) -> str: return "name:" + self.name + ",age:" + str(self.age) d = Dog()d.name = '小狗'd.age = 20...
一、常见的特殊方法
-
# 重写__repr__方法(相当于java中的toString方法)
-
class Dog:
-
name = ''
-
age = 0
-
-
def __repr__(self) -> str:
-
return "name:" + self.name + ",age:" + str(self.age)
-
-
-
d = Dog()
-
d.name = '小狗'
-
d.age = 20
-
print(d)
-
-
-
class Apple:
-
def __init__(self, color, weight):
-
self.color = color
-
self.weight = weight
-
-
def __repr__(self):
-
return "Apple[]"
-
-
-
a = Apple('红色', 5.68)
-
print(a)
需要说明的是,不要以为对一个变量执行del操作,该变量所引用的对象就会被回收 -- 只有当对象的引用计数变成0时,该对象才会被回收,因此,如一个对象有多个变量引用它 ,那么del其中一个变量是不会回收该对象的。
二、与反射相关的属性和方法
-
#与反射相关的属性和方法
-
"""
-
hasattr(obj,name) 检查对象是否包含name的属性或者防范
-
getattr(obj,name[,default]) 获取对象中名字为name的属性的属性值
-
setattr(obj,name,value,/) 将obj对象的name属性设为value
-
"""
三、与序列相关的特殊方法
四、生成器
-
# 实现迭代器
-
class Fibs:
-
def __init__(self, len):
-
self.first = 0
-
self.sec = 1
-
self.__len = len
-
-
def __next__(self):
-
if self.__len == 0:
-
raise StopIteration
-
# 完成数列计算
-
self.first, self.sec = self.sec, self.first + self.sec
-
self.__len -= 1
-
return self.first
-
-
def __iter__(self):
-
return self
-
-
-
fibs = Fibs(10)
-
print(next(fibs))
-
for el in fibs:
-
print(el, end=' ')
-
-
# 创建生成器
-
"""
-
1.定义一个包含yield语句的函数
-
2.调用第一步创建的函数得到生成器
-
-
-
"""
-
-
-
def test(val, step):
-
print("函数开始执行~~~~~~~~~~~~")
-
cur = 0
-
# 遍历0~val
-
for i in range(val):
-
cur += i * step
-
yield cur
-
-
-
"""yield cur语句的作用
-
每次返回一个值,有点类似于return
-
冻结执行,程序每次执行yield语句时就会被暂停。
-
在程序被yield语句冻结之后,当程序再次调用next()函数获取生成器的下一个值时,
-
程序才会继续向下执行
-
需要指出的是,调用包含yield语句的函数并不会立即执行,它只会返回一个生成器。
-
只有当程序通过next()函数调用生成器或者遍历生成器时,函数才会真正执行
-
"""
-
t = test(10, 2)
-
# 获取下一个值
-
print(next(t))
-
print(next(t))
-
# 将生成器转换成列表
-
l = list(t)
-
t = tuple(t)
-
#close() 该方法用于停止生成器,关闭生成器之后,无法再获取下一个值,否则就会报错
-
#throw() 该方法用于在生成器内部(yield语句内)引发一个异常
五、运算符重载的特殊方法
文章来源: blog.csdn.net,作者:血煞风雨城2018,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_31905135/article/details/100771275
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)