Python从哪里借用descriptor的概念?
Python是否从其他一些编程语言中借用了它?在C#中,我只看到属性,而不是描述符。
通过首先学习其他语言而不是直接学习Python,我不仅可以从描述符中受益,还可以从中受益吗?
答案 0 :(得分:4)
来自Python本身。引用Guido Van Rossum 1,在Python 2.2中引入了描述符作为绑定方法概念的概括,这对于以前版本中经典类的实现至关重要。。
语言有两种常用的方法来支持功能和面向对象的编程。每个callable都是一个方法,函数只是隐藏类的方法,这是Ruby采用的方法;或者每个callable都是一个函数,而object对象方法只是带有隐式或显式参数的函数,它接收调用该方法的对象,这是Python采用的方法。
在Python 2.1及之前,当实例属性查找在实例字典中失败时,解释器以递归方式查看类和基类。如果在类字典中找到该属性并且它是一个函数,则解释器将其包装在一个可调用对象中,该对象在调用实例时将其作为第一个参数插入。包装器将实例绑定到函数,因此命名绑定方法。
描述符是对该行为的概括。在Python 2.2及更高版本中,解释器以相同的方式执行属性查找,并且当在类字典中找到属性并且它具有__get__
方法时,将使用类和实例作为参数调用此方法,并且返回的任何内容都用作属性搜索的结果。绑定方法包装器现在只是实现__get__
方法的普通对象,而不是特殊对象,允许我们自定义它并实现classmethod
和staticmethod
等特殊方法。最重要的是,我们有补充方法__set__
和__delete__
,概括了分配和删除的相同行为,允许我们实现property
和各种托管属性等内容。< / p>