`__enter__`和`__exit__`上下文管理器魔法方法
发表于:
在Python中,__enter__
和 __exit__
是上下文管理器的两个魔术方法,这些方法使得对象能够被用于 with
语句,从而简化资源管理和异常处理。
`__len__`魔法方法
发表于:
`@final`装饰器和 `Final`注解标记不可被修改或重写
发表于:
python 包搜索路径(Package Search Path)
发表于:
在 Python 中,当你导入一个模块时,解释器会根据一定的顺序搜索模块所在的位置。这个搜索路径被称为包搜索路径(Package Search Path)。下面是 Python 包搜索路径的一般顺序:
python 魔法方法`__getitem__` 和 `__setitem__`
发表于:
用途
不需要调用实例方法,像操作 python 原生对象一样去 get
和 set
。
示例
1class MyList:
2 def __init__(self, data):
3 self.data = data
4
5 def __getitem__(self, index):
6 return self.data[index]
7
8 def __setitem__(self, index, value):
9 self.data[index] = value
10
11my_list = MyList([1, 2, 3, 4, 5])
12print(my_list[1]) # 输出: 2
13
14my_list[1] = 42
15print(my_list[1]) # 输出: 42
python 中的生成器和迭代器
发表于:
迭代器
定义
迭代器是实现了__iter__()
和__next__()
方法的对象。它允许用户逐个访问集合中的元素,而不需要知道集合的底层结构。
工作原理
__iter__()
:返回迭代器对象自身。__next__()
:返回集合中的下一个元素。如果没有更多元素可供返回,则抛出StopIteration
异常。
示例
1class MyIterator:
2 def __init__(self, data):
3 self.data = data
4 self.index = 0
5
6 def __iter__(self):
7 return self
8
9 def __next__(self):
10 if self.index < len(self.data):
11 result = self.data[self.index]
12 self.index += 1
13 return result
14 else:
15 raise StopIteration
16
17# 使用迭代器
18my_iter = MyIterator([1, 2, 3])
19for item in my_iter:
20 print(item) # 输出: 1 2 3
生成器
定义
生成器是使用yield
关键字定义的特殊类型的迭代器。与普通函数不同,生成器函数在执行时会暂停,并在下一次调用时继续执行。
python魔法方法`__repr__`和`__str__`魔法方法
发表于:
用途
repr:用于将对象转换为可打印的字符串形式。
repr
,全称是 representation(表示)。
示例
1class Person:
2 def __init__(self, name, age):
3 self.name = name
4 self.age = age
5
6 def __repr__(self):
7 return f"Person({self.name}, {self.age})"
8
9# 创建一个Person对象
10person = Person("John", 20)
11
12# 使用repr()函数打印对象的__repr__方法返回的字符串
13print(person)
__str__
和__repr__
区别
在Python中,__str__
和__repr__
都是特殊方法,用于返回对象的字符串表示。它们的主要区别在于它们的目的和使用场景。
__call__()让你的实例像方法一样去调用
发表于:
分类于:
Python
允许你的类的实例像函数一样被调用