python类
- 类级别的变量
# 创建类
class Foo:
# 这里我们可以创建一个类级别的变量
# 它不会随着由此类创建的变量而变化
name = 'Jan'
def bar(self):
print('Bar')
def hello(self, name):
print('you are %s' %self.name)
print('I am %s' %name)
print('
')
# 根据Foo创建的对象
obj1 = Foo()
obj2 = Foo()
obj1.hello('August')
obj2.hello('July')
输出结果:
you are Jan
I am August
you are Jan
I am July
- self是个代指。代指了自己所在的class。你可以由 self 点进所指class本身的函数。由此可见,self 本身作为一个代词,并不一定要叫self。你也可以用个其他什么来代替。只不过,必须得是这个类的所有子方法的第一个参数:
- self.name指类中的Jan
类属性和实例属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性。
给实例绑定属性的方法是通过实例变量,或者通过self变量:
2.1 实例属性
class Student(object):
def __init__(self, name):
self.name = name
s = Student('Bob')
s.score = 90
score是实例属性
实例属性优先级高于类属性
# -*-coding:utf-8 —*—
class Student(object):
name = 'Student'
s = Student() # 创建实例s
print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name>属性
s.name = 'Michael' # 给实例绑定name属性
print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
print(Student.name)
输出结果为:
Student
Michael
Student
- 从上面的例子可以看出,在编写程序的时候,千万不要把实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。
构造函数__init__()的参数
模块和包
模块:在python中一个文件可以被看成1个独立模块,模块把python代码分成一些有组织的代码段,通过导入的方式实现代码重用。
包:对应着文件夹,包必须至少含有一个__int__.py文件按,该文件的内容可以为空。int.py用于标识当前文件夹是一个包。
- 包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。 一个普通的python应用程序目录结构:
app/
__init__.py
a/
__init__.py
a.py
b/
__init__.py
b.py
app是最顶层的包,a和b是它的子包,可以这样导入:
from app.a import a
from app.b.b import test
a.test()
test()
reload():用于重新载入之前载入的模块,使得多次导入都有效
reload() 函数语法:
reload(module)
- 为了防止被import的模块修改之后因之一次导入而使得修改不起作用而存在
开启一个交互对话,创建一个如下文件script.py:
#-*-coding:utf-8 -*-
import sys
print sys.platform
print 2**100
x='spam'
print x*8
在命令行中运行,结果如下:
>>> import scripy
darwin
1267650600228229401496703205376
spamspamspamspamspamspamspamspam
>>> import scripy
>>>
也即每次交互,只有第一次导入有效,因为,默认情况下,只有在每次会话的第一次运行,第一次导入之后,其他的导入都不会再工作,甚至对模块内容的修改也仍然不会工作。只有推出交互后重新建立一次交互再导入才可以(这多麻烦呀)
- 因为导入是开销很大的操作,
为解决导入问题,要在同一次会话中多次运行文件,需引入reload()
>>> import scripy
darwin
1267650600228229401496703205376
spamspamspamspamspamspamspamspam
>>> reload(scripy)
darwin
1267650600228229401496703205376
spamspamspamspamspamspamspamspam
<module 'scripy' from 'scripy.pyc'>
>>>