PyCharm是一个很好的IDE,但它的代码提示并不那么聪明.例如,当我用它来编写Python2代码时(我的解释器路径的设置可以告诉PyCharm这个),我输入prin,我希望PyCharm给我一个打印提示,但是,第一个提示是print(),这是一种Python3风格的功能打印.PyCharm中是否有任何设置我可以告诉它在编写Python2代码时不给我Python3提示(当我编写Python3代码时不要给我Python2提示)?
我的PyCharm版本是2.7.1
最近我读了关于Python描述符的官方HOW-TO,它实际上源于Raymond Hettinger很久以前写的一篇文章.但在阅读了几次之后,我仍然对它的某些部分感到困惑.我将引用一些段落,然后是我的困惑和问题.
如果实例的字典具有与数据描述符同名的条目,则数据描述符优先.如果实例的字典具有与非数据描述符同名的条目,则字典条目优先.
对于物体,机器在
object.__getattribute__()其中转变b.x为type(b).__dict__['x'].__get__(b, type(b)).该实现通过优先级链工作,该优先级链使数据描述符优先于实例变量,实例变量优先于非数据描述符,并且__getattr__()如果提供则赋予最低优先级.对于课程,机器在
type.__getattribute__()其中转变B.x为B.__dict__['x'].__get__(None, B).
b.x)和class(B.x)访问的属性之间的区别.但是,这是我的困惑:
b.x为type(b).__dict__['x'].__get__(b, type(b))和B.x转换B.__dict__['x'].__get__(None, B))是否仍会继续?是否更简单地返回此类或实例的dict中的属性?非数据描述符提供了一种简单的机制,用于将通常的绑定函数模式变为方法.
函数有一个
__get__()方法,以便在作为属性访问时可以将它们转换为方法.非数据描述符将obj.f(*args)调用转换为f(obj, *args).呼叫klass.f(*args)变为f(*args).
obj.f(*args)调用转换为f(obj, *args)?klass.f(*args)调用转换为f(*args)?