面向对象编程
类
模板
class Cat:
#属性
#方法
def eat(self):
print("猫吃鱼")
def drink(self):
print("猫喝水")
def introduce(self):
print(self.name,self.age)
#创建对象
tom = Cat()
tom.eat()
tom.drink()
对象
具体内容 对象:函数和全局变量的封装 函数:部分功能模块的封装
谁调用self,self是哪个对象
init方法
创建对象之后,python自动调用init方法,将self指向刚创建对象的引用(地址),返回初始化之后的引用给tom
def init
str方法
获取对象的描述(属性)信息
def str
对象间传递属性
私有方法 私有属性
在属性和方法前面加上两个下划线 "__test"
私有方法需要被共有方法判断之后被调用
def del: 方法
在对象被销毁之前调用del方法
继承
class A(object):
class B(A): 代表B类继承A类
私有方法不会被继承
私有属性不会被继承
使用同一个类中的公有方法调用私有方法
重写
重写父类的方法
调用父类的方法 super().方法
多继承
class C(A,B):
类名.mro 决定调用一个方法时的顺序
多态
类属性、实例属性
类属性可以在多个实例对象间共享
实力属性只能在本实例对象中共享
类方法、实例方法、静态方法
定义类方法
@classmethod
def add_num(cls)
调用类方法 类名.方法名() 或对象.方法名()
@staticmethod 与类无关 但放在类中的静态方法
def print_menu():
调用类方法 类名.方法名() 或对象.方法名()
new方法
调用new方法创建对象
调用init方法初始化对象
调用del方法删除对象
单例
创建多个对象时,指向同一个对象。通过重写new方法来实现
def new(cls):
__instance = None
if cls.__instance == None: #判断是否第一次
cls.__instance ==object.new(cls)
return cls.__instance
else:
return 上一次创建的对象的引用
return cls.__instance
异常处理
try:
except 异常名: 如(NameError,FileNotFoundError)
若抛出的异常与定义的异常名字不一样,那就采用系统默认的异常来处理
except Exception: 只要以上异常不满足,都采用这个异常处理
except 异常名 as 变量名: 异常的核心原因放到变量中
else: 没有异常才会执行
finally: 不管有无异常,都会执行
异常传递
抛出自定义异常
raise 抛出异常
模块
导入模块后,将模块翻译成二进制,保存成缓存形式(字节码pyc),为了保证下次程序时高效运行
import A as 别名 #当模块名太长时使用别名
from A import test1,test2
from A import *
先搜索当前路径,再搜索系统指定路径
模块中的__name__变量、__all__变量
name若是自身模块那么name的值为main,若为其他模块则是其他模块名。
all = ["函数功能名1",“函数功能名2”] 允许被其他模块调用的内容
包、init.py(python2)
在文件夹下创建__init__py,导入模块时能够被导入
init.py中写入__all__ = ["指定要使用的模块"]
模块发布、安装
创建setup.py,写入要发布的模块
python3 setup.py build 执行发布模块命令,将模块安装到python3中
python3 setup.py sdist 生产tar.gz压缩包
python3 setup.py install 安装到了系统目录
给程序传参
import sys
sys.argv接收参数
列表生成式
a = [i for i in range(1,5)]
a = [1,2,3,4]
a = [11 for i in range(1,5)]
a = [11,11,11,11]
集合
集合用花括号,并且里面的元素不重复,例 a={1,1,2,2} ==》 {1,2}
可以用于列表中元素去重