比较PHP';Python中带有uu get和u getattr的s uu get()
Python中的比较PHP';Python中带有uu get和u getattr的s uu get(),php,python,Php,Python,Python中的\uuu get\uu()和\uu getattr\uu()之间有什么区别?我来自PHP背景,那里只有\uu get()。我应该什么时候使用哪个功能 我想弄清楚这件事已经有一段时间了。我看到很多问题,比如询问\uu getattr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 来自PHP,您应该首先熟悉Python对
\uuu get\uu()
和\uu getattr\uu()
之间有什么区别?我来自PHP背景,那里只有\uu get()
。我应该什么时候使用哪个功能
我想弄清楚这件事已经有一段时间了。我看到很多问题,比如询问
\uu getattr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
来自PHP,您应该首先熟悉Python对象模型。它比PHP丰富得多,因此您不应该尝试将PHP知识1:1映射到Python。如果您想开发PHP,请使用PHP。如果您想使用Python进行开发,请学习Python
回到您最初的问题:\uuuuu getattr\uuuu
可能是与PHP中的\uuuu get
函数相同的函数\uuuu get\uuuu
用于实现描述符。关于描述符的详细信息也可以在我上面提到的文档中找到。首先,PHP与Python的\uu get\uuuu()
没有等价物,甚至还没有接近!你要找的肯定是\uuu getattr\uuuu()
我来自PHP背景,那里只有\uuuu get\uuuu
PHP有一个called,当您试图访问一个不存在的属性时,就会调用它
非等价物的简短列表
首先,让我们澄清一些事情:
- PHP的不与Python的
\uuuu get\uuuuu()有一个等价物
- PHP没有与Python的
\uuu getattr\uuuu()等价的代码
- PHP不具有与Python的
\uuu getattribute\uuuuu()等价的
- Python没有与PHP的
\uu get()
\uu get()
与Python的\uu getattr()
做的不一样Python不区分方法和属性,但PHP区分,这就是为什么PHP有第二个方法:
\uu call()
每当您尝试调用不存在的对象上的方法时,都会执行\u call()
。Python没有相应的方法,因为方法只是一个可调用的对象(属性)
PHP中的一个示例:
也毫无价值,您几乎不必直接访问这些方法。您可能需要覆盖它们,但您永远不应该调用它们。@Daniel Roseman:几乎永远不会,但是不能被实例隐藏的classproperty(property)
可能会很方便,使用def\uu get\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(self,obj,cls):返回self.fget.\uuuuuu获取(type(obj),type(type(type(obj)))(val)
。诚然,\uuuu getattr\uuuu()
类似于PHP的\uu get()
,但有一些重要的区别。更多细节请参见我的答案。