浅谈python中类,函数,包

来源:互联网 发布:软件项目解决方案模板 编辑:程序博客网 时间:2024/05/21 09:58

1、也可以将函数的参数定义为默认参数,注:默认参数一般放参数的最后。
2、注意:在类中的方法【函数】的第一个参数必须是(self)。这样一来这个参数就是这个类里面的全局变量了,在这个类中的其他函数也就可以使用了,这种做法非常常见。
3、类属性是不通过方法就能获取到,类属性是供所有实例【对象】共享的,只有实例自己内部的属性是实例自己使用的

1. 类就是类了.
2. 模块就是py文件, 模块名就是py文件名去掉后缀.py
3. 包就是文件夹, 包名就是文件夹名.
4. 类放在模块中(类在py文件中定义); 模块放在包中(py文件放在文件夹中); 包中也可以有包(文件夹可以有子文件夹)
1. 类
类就是类了.
定义一个类:
[python] view plain copy print?
1.class MyClass(OtherClass):
2. myClassIndex = 1
3. def init(self, a, b, c, classIndex):
4. # 调用父类的构造函数
5. OtherClass.init(self, a, b, c)
6. self.myClassIndex = classIndex
7. # 重写父类的方法
8. def DoSomething(self):
9. print(“MyClass Index is %d” %(self.myClassIndex))
定义了类之后就是使用类了:
使用类就是要初始化它,就是在程序中创建一个类的实例,就是调用它的名字
对象 = 类名()
对象 . 属性 = ‘*’ 【定义属性】

一、
Python里面有一个特殊的方法叫做 init() ,当你在实例化一个新的类的实例的时候,它就会被调用。init() 需要为每一个你想要定义值的属性定义一个参数。
这样使得创建一个新的实例变得更简单,唯一的缺点就是必须要指定默认值,如果不这样做的话,就会出现错误。
2. 模块
模块可以理解为对应于一个py文件. py文件中定义一些函数, 变量, 类等.
例如: 文件
[python] view plain copy print?
1.# MyModule1.py
2.def MyDoSomething(a)
3.print(a)
4.class MyClass1:
5. myClassIndex = 1
6. def init(self, classIndex):
7. self.myClassIndex = classIndex
8.def DoSomething(self):
9. print(“MyClass Index is %d” %(self.myClassIndex))
导入这模块,就可重用这些函数和变量。
导入例子:
[python] view plain copy print?
1.# Caller.py
2.import MyModule1
3.print(name) # 打印本模块的名字
4.print(MyModule1.name) # 打印MyModule1模块的名字
5.MyModule1.MyDoSomething(‘Hi’) # 调用MyModule1的MyDoSomething方法
注:
模块作为主程序调用时, name的值是main, 否则值就是模块名了
3. 模块的路径搜索
当MyModule1被导入后,python解释器就在当前目录下寻找MyModule1.py的文件, 如果没有, 则再从环境变量PYTHONPATH寻找, 如果这环境变量没有设定, 解释器还会在安装预先设定的的一些目录寻找。
更强大的是, 这个搜索路径列表可以动态的添加.非常简单,就是使用list的append()或insert()增加新的目录.
[python] view plain copy print?
1.#module2.py
2.import sys
3.import os
4.print(sys.path)
5.workpath = os.path.dirname(os.path.abspath(sys.argv[0]))
6.sys.path.insert(0, os.path.join(workpath, ‘modules’))
7.print(sys.path)
4. 包
包可以理解为文件夹, 你可以按照不同的功能, 把模块放到不同的包里面去(就是把py文件按功能放到不同的文件夹里面去).
但是要特别注意的是, 当文件夹当作包使用时, 文件夹需要包含init.py文件, 主要是为了避免将文件夹名当作普通的字符串. init.py的内容可以为空, 一般用来进行包的某些初始化工作或者设置all值, all是在from package-name import *这语句使用的,全部导出定义过的模块.