我发现魔术方法和魔术方法去掉下换线之后可以使用内置方法这样成对地使用,
可以看到如下的__iter__和__next__对应的被调用时候的方法。
class MyIterable:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
my_obj = MyIterable([1, 2, 3])
iter_obj = iter(my_obj)
print(iter_obj is my_obj)
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
result = self.data[self.index]
self.index += 1
return result
my_iter = MyIterator([1, 2, 3])
print(next(my_iter))
print(next(my_iter))
print(next(my_iter))
try:
print(next(my_iter))
except StopIteration:
print("迭代结束")
1、请问是否是所有魔术方法都符合此规律?
2、Python在设计的时候,是否就是这样设计然后让我们可以进行调用呢?
请问是否是所有魔术方法都符合此规律?
不是所有魔术方法都符合此规律。魔术方法(也称为特殊方法或双下划线方法)如 __iter__
和 __next__
是迭代器协议的一部分,它们确实与内置的 iter()
和 next()
函数相对应,使得对象可以像迭代器一样被使用。然而,并不是所有的魔术方法都遵循这种直接对应的模式。有些魔术方法用于实现特定的协议(如迭代器协议、可调用对象协议等),而有些则用于触发特定的事件(如 __init__
用于对象初始化,__del__
用于对象销毁)。
Python在设计的时候,是否就是这样设计然后让我们可以进行调用呢?
是的,Python 的设计确实是为了让开发者能够通过实现特定的魔术方法来使他们的类能够与 Python 的内置函数和操作符无缝协作。这种设计允许开发者创建出具有丰富功能和灵活性的自定义对象,这些对象可以像内置类型一样被使用。例如,通过实现 __iter__
和 __next__
方法,一个类可以变成一个迭代器,允许它使用 for
循环进行迭代。这种设计使得 Python 的面向对象编程非常强大和灵活。
问题内容: 除非我完全误解,否则and 方法应该允许→ 和的重载。 例如,以下语句应调用该方法: 并且以下应使用该方法: 这在我的代码中不起作用,并且可以通过以下简单示例重现: 这只会导致: 在那儿放一些电话表明它根本没打。 现在,我只是说了一下要解决的问题,并在目前需要的地方手动使用它,但这不是很动态,并且需要知道“重载”代码实际上没有被调用,除非专门调用。我想知道这是否不是应该以我所理解的方式
问题内容: 如果Java中没有编译时绑定,是否意味着所有绑定都在运行时完成? 但是,按照OOP的运行时绑定概念,函数必须具有virtual关键字。.是否所有方法在Java中都是隐式虚拟的,还是Java中存在任何编译时绑定? 如果有任何编译时约束,您能给我一些具体情况,还是链接到更多信息 静态的(这里没有绑定的含义,因为静态不属于对象) 最终的(这不是有效点,因为可以通过其他方式实现) 问题答案:
考虑以下令人厌恶的类别: 然后,可以通过 lst调用map(,lst),即 但是,添加并不那么合作: 这种陌生感可以通过直接调用魔法方法来解决: 所以我的问题是,是什么给了我们?直接分配<code>__add_
关于速率限制/限制Kafka消费者,有很多老话题 如何在flink上使用Ratimiter? 动态油门闪烁Kafka源 等等 但是它们都不能在案例1.15中使用: 不公开 现在它驻留在中 KafkaSource是首选方法 所以,我的问题是,是否有必要将ThrottleEditor与KafkaSource结合起来?
在学习组件tree的时候: 请问是否有方法可以一键展开所有节点呢? 编辑1: 因为我设置了defaultExpandAll没有效果,所以想要知道是否有方法可以对<Tree>进行展开所有?
1.13.1 魔术方法: 在Python中的面向对象中有很多魔术方法如: __init__: 构造函数,在生成对象时调用 __del__: 析构函数,释放对象时使用 __str__: 使用print(对象)或者str(对象)的时候触发 __repr__: 在使用repr(对象)的时候触发 __setitem__ : 按照索引赋值:每当属性被赋值的时候都会调用该方法:self._
问题内容: 我有一个。我想检查列表中的所有元素是否大于或小于某些条件。我可以通过迭代每个元素来做到这一点。但是我想知道Collection类中是否有任何方法来获取答案,就像我们可以分别使用和查找最大值或最小值一样。 问题答案: 如果您有Java 8,请使用流的功能(reference):
问题内容: 这些是简单的示例,但是假设您的类中的属性多于两个。 什么是最佳做法? a)使用__get和__set b)使用传统的setter和getter 本文内容:http://blog.webspecies.co.uk/2011-05-23/the-new-era-of-php- frameworks.html 作者声称使用魔术方法不是一个好主意: 首先,那时使用PHP的魔术函数(get, c