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已经扫描过了整个文件,故不会找不到变量。
相关文章推荐
- 详解在Python的Django框架中创建模板库的方法
- python 下载 JPG 图片
- 简单介绍Python的Django框架加载模版的方式
- 建立eclipse+PyDev+Python+NumPy+SciPy的环境
- python 分析android日志获取activit加载时间
- python 快排,堆排,归并
- python安装第三方库
- Apriori算法的python实现
- python之简单邮件发送(带附件、图片)
- IntelliJ IDEA 11.0.1安装python为例
- python之简单邮件发送(带图片)
- 在Python的Django框架中包装视图函数
- python之mail简单使用(html)
- win7、Python3.4安装cx_freeze
- Python开发入门与实战11-单元测试
- 用Python写了个抓图小脚本
- python下如何安装.whl包
- python学习之成员信息增删改查
- Python 编程练习
- 豆瓣API在python中的使用