您的位置:首页 > 编程语言 > Python开发

Python 一些值得注意的地方

2015-07-20 13:00 671 查看

空字符串注意

>>> if ' ':
...     print 'Not False'
...
Not False
>>> if '':
...     print 'Not False'
...


类属性实例属性

def get(*agrs):
return "global func abc"

def i():
pass

class A(object):

__getattr__ = get

bound_func = i

def f1(self):
pass

a = A()

print a.bound_func
# <bound method A.i of <__main__.A object at 0x7f64a9a2f790>>

a.i = i
print a.i
# <function i at 0x7f64a9a30d70>


a.i = i
仅仅是将全局函数 i 作为实例 a 的属性。

而在类中定义类属性
bound_func = i
,类生成实例后会成为
Bound function


类中使用全局作用域

class MainClass(object):
# func = abc   #: error name 'xxx' is not defined
def __init__(self):
self.func = abc
self.message = message

def abc():
pass

message = "This is a message"

a = MainClass()
print a.func
print a.message


是可以执行成功的,即使函数和变量定义在类下面,但是类还是能成功生成实例,并且把它们作为实例属性。

不过如果不是放在实例的初始化特殊方法
__init__
中,而是作为类变量,那么会报熟悉的
name 'xxx' is not defined
。必须把函数和变量的定义放在类上面。

懒得深究!个人猜测,Python是动态语言,执行时会自上而下扫描整个文件。探测到类属性的定义,变量的定义在类之下,便会找不到变量。但是
__init__
为实例的构造方法,实例化类时才会调用,所以实例化的时候,Python已经扫描过了整个文件,故不会找不到变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: