最近,我在YouTube上观看了詹姆斯·鲍威尔(James Powell)的一次非常有趣的演讲(LINK,视频播放时间约为12分钟)。在他的PyData演讲中,他指出“ [...] Python数据模型是一种可以实现协议的方法”。他将自己的陈述与诱骗方法(例如__init__
,__repr__
等)的使用联系起来。
我使用Python进行编程已经有一段时间了,但是我还没有遇到过POP。该视频并没有真正定义它的含义。 python中的POP实际上是什么,在实践中如何使用?
答案 0 :(得分:0)
python 是面向协议的,他可能是指以下内容的组合:
Duck typing:“如果它走路像鸭子,叫起来像鸭子,那它一定是鸭子”。与 C 或 C++ 之类的语言相比,您不太关心传递的对象的类型,而更关心对象提供的接口。我认为对象接口等同于其方法的总和或对象提供的协议。尽管打字现在是 Python 的一部分,因为 version 3.5 通过类型提示,鸭子打字在语言中根深蒂固,以至于 PEP 544 – 恰如其分地称为“协议:结构子类型(静态鸭子输入)”——在使用静态类型的同时将这个概念嵌入到语言中。
方法(== 协议)是 python 满足其操作符、标准函数甚至它的语法的手段:
a + b
这样的运算符,您需要为 __add__(self, other)
实现 a
方法Sized
类型的要求从而提供标准的 len(…)
函数,您实现了 __len__
方法a
这样的 for 循环中使用对象 for _ in a:
,您需要实现它的 __iter__
方法__next__
方法with A(…) as a:
,您需要提供__enter__
和__exit__
方法作为程序员,我们通过为对象提供 corresponding protocol 来提供 Python 的标准包含方式。
在python中,一切都是对象,字符串、列表、函数甚至模块。上面显示的范例也适用于那里。原则上您可以添加函数,它们是第一类对象。函数本身有方法,也就是对象,所以它们也有方法,也就是对象,......
附加说明:我是在看了同一个演讲并绊倒同一个短语后发现了你的问题。我的印象是他的意思并不是“面向协议”这个词的字面意思,而是更通俗的意思。我认为以上三点证明了他的说法。
答案 1 :(得分:-1)
确定要流行吗 我想你的意思是 面向对象编程 像这样:
Class animal:
def __init__(self, name, color):
self.name = name
self.color = color
Dog = animal(" huskey", "black")
print(animal.name)
print(animal.color)