python【系列教程】之类的特殊方法

举报
小米粒-biubiubiu 发表于 2020/12/02 23:32:18 2020/12/02
【摘要】 一、常见的特殊方法 # 重写__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...

一、常见的特殊方法


  
  1. # 重写__repr__方法(相当于java中的toString方法)
  2. class Dog:
  3. name = ''
  4. age = 0
  5. def __repr__(self) -> str:
  6. return "name:" + self.name + ",age:" + str(self.age)
  7. d = Dog()
  8. d.name = '小狗'
  9. d.age = 20
  10. print(d)
  11. class Apple:
  12. def __init__(self, color, weight):
  13. self.color = color
  14. self.weight = weight
  15. def __repr__(self):
  16. return "Apple[]"
  17. a = Apple('红色', 5.68)
  18. print(a)

 需要说明的是,不要以为对一个变量执行del操作,该变量所引用的对象就会被回收 -- 只有当对象的引用计数变成0时,该对象才会被回收,因此,如一个对象有多个变量引用它 ,那么del其中一个变量是不会回收该对象的。

 

 

二、与反射相关的属性和方法


  
  1. #与反射相关的属性和方法
  2. """
  3. hasattr(obj,name) 检查对象是否包含name的属性或者防范
  4. getattr(obj,name[,default]) 获取对象中名字为name的属性的属性值
  5. setattr(obj,name,value,/) 将obj对象的name属性设为value
  6. """

 

三、与序列相关的特殊方法

四、生成器


  
  1. # 实现迭代器
  2. class Fibs:
  3. def __init__(self, len):
  4. self.first = 0
  5. self.sec = 1
  6. self.__len = len
  7. def __next__(self):
  8. if self.__len == 0:
  9. raise StopIteration
  10. # 完成数列计算
  11. self.first, self.sec = self.sec, self.first + self.sec
  12. self.__len -= 1
  13. return self.first
  14. def __iter__(self):
  15. return self
  16. fibs = Fibs(10)
  17. print(next(fibs))
  18. for el in fibs:
  19. print(el, end=' ')
  20. # 创建生成器
  21. """
  22. 1.定义一个包含yield语句的函数
  23. 2.调用第一步创建的函数得到生成器
  24. """
  25. def test(val, step):
  26. print("函数开始执行~~~~~~~~~~~~")
  27. cur = 0
  28. # 遍历0~val
  29. for i in range(val):
  30. cur += i * step
  31. yield cur
  32. """yield cur语句的作用
  33. 每次返回一个值,有点类似于return
  34. 冻结执行,程序每次执行yield语句时就会被暂停。
  35. 在程序被yield语句冻结之后,当程序再次调用next()函数获取生成器的下一个值时,
  36. 程序才会继续向下执行
  37. 需要指出的是,调用包含yield语句的函数并不会立即执行,它只会返回一个生成器。
  38. 只有当程序通过next()函数调用生成器或者遍历生成器时,函数才会真正执行
  39. """
  40. t = test(10, 2)
  41. # 获取下一个值
  42. print(next(t))
  43. print(next(t))
  44. # 将生成器转换成列表
  45. l = list(t)
  46. t = tuple(t)


  
  1. #close() 该方法用于停止生成器,关闭生成器之后,无法再获取下一个值,否则就会报错
  2. #throw() 该方法用于在生成器内部(yield语句内)引发一个异常

 

五、运算符重载的特殊方法

 

 

 

 

 

文章来源: blog.csdn.net,作者:血煞风雨城2018,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31905135/article/details/100771275

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。