python的魔法方法

英文下划线与编辑器冲突,以中文代替

构造函数

——init——
使用构造函数在对象创建后就能够调用它

class FooBar:
 def __init__(self):
 self.somevar = 42
>>> f = FooBar()
>>> f.somevar
42 

给构造函数加参数

class FooBar:
 def __init__(self, value=42):
  	self.somevar = value 
>>> f = FooBar('This is a constructor argument')
>>> f.somevar
'This is a constructor argument'

元素
——len(self)——:这个方法应返回集合包含的项数,对序列来说为元素个数,对映射来说为键值对数。如果——len——返回零(且没有实现覆盖这种行为的——nonzero——),对象在布尔上下文中将被视为假(就像空的列表、元组、字符串和字典一样)。

——getitem——self, key):这个方法应返回与指定键相关联的值。对序列来说,键应该是0~n-1的整数(,其中n为序列的长度。对映射来说,键可以是任何类型。

——setitem——(self, key, value):这个方法应以与键相关联的方式存储值,以便以后能够使用——getitem——来获取。当然,仅当对象可变时才需要实现这个方法。

——delitem——(self, key):这个方法在对对象的组成部分使用——del——语句时被调用,应删除与key相关联的值。同样,仅当对象可变(且允许其项被删除)时,才需要实现这个方法。

迭代器

class Fibs:
 def __init__(self):
   self.a = 0
   self.b = 1
 def __next__(self):
   self.a, self.b = self.b, self.a + self.b
   return self.a
 def __iter__(self):
   return self 
   fibs=Fibs()
for f in fibs:
    if f == 1:
      print(f)
      break

生成器
生成器由两个单独的部分组成:生成器的函数和生成器的迭代器。生成器的函数
是由def语句定义的,其中包含yield。生成器的迭代器是这个函数返回的结果。

nested = [[1, 2], [3, 4], [5]] 
def flatten(nested):
 for sublist in nested:
 for element in sublist:
 yield element 
>>> nested = [[1, 2], [3, 4], [5]]
>>> for num in flatten(nested):
... print(num)
...
1
2
3
4
5 
发布了25 篇原创文章 · 获赞 8 · 访问量 929

猜你喜欢

转载自blog.csdn.net/weixin_44617944/article/details/102904829