面向对象基础
面向对象:对整个代码逻辑(包含数据、函数、逻辑)进行包装(封装),最大程度提升代码复用,减少编程量
python是面向过程语言、函数式
类:对一系列具有相同特征和行为的事物的统称,特征即属性,行为即方法
对象:根据类具体创造出来的
类设计规则:
类的名称:满足大驼峰命名法
类的属性:特征
类的方法:行为
class 类名():
pass
创建对象(实例):对象名 = 类名()
魔法方法:__xx__()函数,指具有特殊功能的函数
方法名 | 类型 | 作用 |
__init__ | 方法 | 对象被初始化时,会被自动调用,专门定义对象具有的属性和方法 |
__str__ | 方法 | 返回对象的描述信息,print函数输出使用,不加__str__正常返回对象指向的内存地址 |
类外面设置对象属性:对象名.属性名 = 值
类里面获取对象属性:对象名.属性名
类属性:写在类里的属性,该类所有的实例对象共有(类和实例对象都可访问)
优点:类属性为全类所共有,只占一份内存,实例属性需要为每个对象单独开辟一份内存空间
实例属性不能通过类来访问
类方法和静态方法
类方法:装饰器@classmethod来标识,一般和类属性配合使用。第一个参数是对象,一般以cls作为第一个参数。可以通过实例对象和类对象访问
class Dog(object):
__tooth = 10
@classmethod
def get_tooth(cls):
return cls.__tooth
wangcai = Dog()
# 实例对象访问类方法
result = wangcai.get__tooth()
print(result) # 10
# 类对象访问类方法
print(Dog.get__tooth)) # 10
静态方法:装饰器@staticmethod来修饰,即不需要传递类对象也不需要传递实例对象(形参没有self或cls)。可以通过实例对象和类对象访问
面向对象-继承
继承:子类默认继承父类所有的属性和方法
class Stu:
def __init__(self, name, coure_name, phoneNum):
self.name = name
self.coure_name = coure_name
self.phoneNum = phoneNum
class PythonAutoStu(Stu):
def __init__(self, name, coure_name, phoneNum):
super().__init__(name, coure_name, phoneNum)
self.coure_name = 'python自动化'
self.time = '16周'
面向对象-多态
多态:具有多种形态,即便不知道一个变量所引用的对象到底是什么类型,仍可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态的决定调用哪个对象中的方法
模块和包
模块:python工具包,使用关键字import来引入
import 模块名.函数名
from 模块名 import 函数名
from 模块名 import *
as起别名:from 模块名 import 函数名 as 函数别名
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录
- 如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
- 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录