概述
属性和方法
- 在类中直接定义的参数是类属性,实例属性可以访问类和实例属性,类对象不能直接调用实例属性。
- 在类中定义,以self为第一个参数的都是实例对象。
- 当通过实例对象调用实例时,调用的参数就是self,当类调用实例对象时,不会把调用参数作为实例传递,故缺少一个参数。假设A是类,a是A的一个实例,当A中有一个name方法时,两者调用并传递a的值的格式分别为,a.name()和A.name(a)
- 如果在类中想定义类属性的方法,则上面一行加@classmethod(method中文名词意思为方法,类函数)此时定义的方法通常用cls来取代self
- 在类中我们称@staticmethod定义的函数为静态方法,不需要任何默认参数,静态对象可以被实例和类调用,静态方法与类本身无关,是一个功能函数,但必须以方法的形式来调用。
模块
- 模块化,顾名思义,将一个完整的程序分成一个小小的模块。
- 模块化方便开发并且方便维护。
- 模块可以复用。
- 在python中其实一个.py文件就是一个模块。
- 模块引入的方法:
- import 模块名
- import 模块名 as 模块在这个程序中的名字(自己可以给模块定义一个新名字,在调用时可以更加符合自己的习惯)
- from 模块名 import 变量,这种方法再调用时不需要用模块名.变量的格式,可以直接使用引入的变量。当需要引入一个模块中的多个变量时可以写成 from 模块名 import 变量1,变量2,变量3
- from 模块名 import 变量 as 新的名字,这样是为了防止主模块和调用模块同名,给调用的变量设置一个新的名字。
- from 模块名 import *可以直接引入模块中的所有变量,并且不需要声明模块名。
- 一个模块可以多次引入,但模块只会执行一次,模块执行时也会输出模块里的print,我们可以用if name==‘main’:来判断这个是不是主模块来决定是否运行他,这样他在被别的模块调用时,就不会执行被if判断后的代码。
- print(模块名)会输出模块和他名字所指向的位置。
- print(name)被其他模块调用时,会输出这个被调用模块的名字,如果直接运行则会输出__main__表示当前文件是主文件。
- 当模块被引用时,和主模块同名的变量会覆盖主模块的变量。
- _变量名,这样写的变量名,是不希望被别人修改的意思。
迭代器
- 迭代器时访问元素的一种方式。
- 特点是便于记住元素位置。
- 迭代器通常由方法iter和next组成
···
lst = [1,2,3,4,5,6,7]
myiter = iter(lst)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
···
输出1,2,3,4,5,6,7
这种格式就别成为迭代数据结构。
这种访问方式和
···
for i in myiter:
print(i)
···
访问的结果是一样的,不过是另一种方式。
- 迭代器不可后退,当next超过元素总数时,则会报错。
生成器
在python中使用yield(中文名词意思产量)这个关键字,我们就称之为生成器函数或者生成器,他和普通函数的区别是,他会返回一个迭代器。
···
def fn():
print(‘11’)
yield 1
print(‘12’)
print(‘13’)
yield 3
print(‘14’)
yield 4
print(‘15’)
yield 5
f = fn()
print(type(f))
print(‘返回:’,next(f)) # 11 返回: 1
print(‘返回:’,next(f)) # 12 返回: 2
print(‘返回:’,next(f)) # 13 返回: 3
···
输出:
<class ‘generator’>
11
返回: 1
12
13
返回: 3
14
返回: 4
<class ‘generator’>表示这个函数的类型是迭代的,事实上只要函数中有一个yield函数就是迭代的。next函数每次会在函数中读取一个yield变量。
最后
以上就是光亮棒球为你收集整理的面向对象和模块的全部内容,希望文章能够帮你解决面向对象和模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复