Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “super”类如何实现代理设计模式?_Python_Python 3.x_Design Patterns_Proxy - Fatal编程技术网

Python “super”类如何实现代理设计模式?

Python “super”类如何实现代理设计模式?,python,python-3.x,design-patterns,proxy,Python,Python 3.x,Design Patterns,Proxy,简而言之,来自Python super(cls,obj)返回对象obj的super-对象(必须是类cls或cls的任何子类的实例),适合调用超类方法 从 super([type[,object或type]])返回代理对象,该代理对象将方法调用委托给类型的父类或同级类 表示super(cls,obj)的返回对象是代理设计模式的一个示例 在Gamma等人的设计模式中 但是我发现,super类只从对象继承,而不是从代理的主体继承,代理是“类型的父类或同级类”。 所以我想知道super类是如何实现代理

简而言之,来自Python

super(cls,obj)
返回对象
obj
super
-对象(必须是类
cls
cls
的任何子类的实例),适合调用超类方法

super([type[,object或type]])
返回代理对象,该代理对象将方法调用委托给
类型
的父类或同级类

表示
super(cls,obj)
的返回对象是代理设计模式的一个示例

在Gamma等人的设计模式中

但是我发现,
super
类只从
对象
继承,而不是从代理的主体继承,代理是“类型的父类或同级类”。 所以我想知道
super
类是如何实现代理设计模式的?用鸭子打字

谢谢。

它只是定制了:来自
超级对象的所有属性检索都是定制的,并且尊重为超级对象创建的类的
\uuuuu mro\uuuu

这意味着:Python语言不需要实际继承一个正在代理的类型来提供对其属性的访问。可以使用不同的机制对属性访问进行完全定制,这些机制将希望代理的任何属性重定向到原始类。自定义
\uuuuu getattribute\uuuuu
很可能是属性访问自定义的“更强”,但也有
\uuuuuuu getattr\uuuuuuu>或使用描述符

所以,进一步回答-我对“duck typing”的理解是一个对象,类提供了一组最小的属性和方法,当它试图像另一个对象一样使用时,它“看起来”像另一个对象。在此视图下,可以说
super
确实使用duck类型,因为在尝试从super对象检索方法和属性时,这些方法和属性将从代理类型获取

但是,
super
类不会试图在它的
repr
中模仿代理类型,也不会像Python对象那样(通过使用
dir
或检查对象的
dict
)不可透视。但是,由于duck类型也不需要这样做,因此它只能作为原始对象来实现所需的目的,这通常是获取并调用具有硬编码名称的方法。所以,是的,“鸭子打字”


请注意,如果需要,Python定制功能将允许“super”对代理类上来自
issubclass
的调用返回“True”。(没有,因为没有必要如上所述)。

我不知道你在读什么版本,但我在谷歌上找到的不知道它是否是合法的PDF文件并没有说明需要以这种方式实现代理。这只是一个示例实现。谢谢。你能告诉我一些没有继承的代理实现吗?Python可以通过实现适当的魔术方法来实现代理。
super
,显然<代码>类型。映射ProxyType
。可能大多数代理对象都是用Python编写的。这是Python做得很好的,也可能做得更多。是的。“定制”是否实现鸭式键入以模仿主题?(答案扩展为包括鸭式键入注意事项)