一、基本概念
1.对象:具有行为和属性 万物皆对象
2.类: 将需求的对象划分为不同的类,具有相同属性或者行为的对象被划分到一个类中。
3.类和对象之间的关系
类:模板 蓝图
对象: 实例,是具体的
类是对象的抽象,对象是类的具体实现
开发过程中,分析从对象开始,将对象分类,考虑类中的属性和行为。
类和类之间的关联:
(1)直接在init中进行强依赖关系的赋值,将参数(其他类的对象),变成自己的属性
(2)另外写方法,将其他类的对象,变为自己类的属性
如果其它类在当前类中使用不是很频繁,把其他类当成参数传入
如果使用频繁,需要把他变成self.属性
二、定义和初始化
1.类的定义
class 类名(父类(可以不写))
‘注释’
类体
对象名=() :括号中是否有参数,取决于init方法
2.类的属性和行为
属性:变量绑定的形式
行为:函数定义的方式
2.1 定义动态属性和行为
(1)定义动态属性
格式 对象
对象.属性名=属性值
(2)定义动态行为
动态创建属性和行为的局限:每一个对象都要单独赋予属性和方法
2.2定义类中的属性和方法(给实例定义属性和实例定义方法)
(1)定义实例方法
(2)定义实例属性:在实例化init方法中去初始化属性
放在init中进行实例化的属性,一定是强依赖的属性
(3)在实例行为中调用实例属性
3.类成员
实例属性 实例方法
类属性 类方法
静态方法
(1)类属性
实例属性:跟类无关,跟每一个实例相关,每个实例独有。
类属性:跟实例无关,跟类相关的属性,所有实例共享。
访问方式:
实例属性:实例.属性 类.实例属性(不能访问实例属性)
类属性: 类.属性 实例.属性
修改:
实例属性:实例.属性 修改
类属性: 类.属性 可以修改 实例.属性 不能修改,会在实例下新创建一个属性。
类属性的应用:定义所有对象都公用的属性。
(2)类方法
实例方法:跟实例相关,跟类没有关系,实例独享
类方法:跟具体实例无关,跟类有关,实例共享
类方法访问: 类.方法(推荐) 实例.方法
实例方法访问 : 类.方法(不推荐) 实例.方法
类方法的使用场合:
创建对象、复制对象
类属性、实例属性在类方法和实例方法中的调用
①类方法中访问类属性
类属性: 类名 . 类属性
②实例方法中访问类属性
③类方法访问实例属性
不合理:类方法为类服务
可以曲线访问,但是没有人这么用,记住不合理。
④实例方法访问实例属性(最重要,最常见)
使用self
(3)静态方法
静态方法跟类不相关,跟对象更不相关。
定义:需要使用@staticmethod装饰
静态方法访问:通过类名访问
关于类和实例的选择
类属性和实例属性:
需要分析 属性是所有对象共享的还是单个对象独享的
共享:类属性
独享:实例属性
类方法、实例方法、静态方法:
需要分析方法是为了哪个属性服务的
4.魔法方法
魔法方法 _ xx _
执行的时候不需要主动调用,当符合一定条件的时候自动调用。
(1)new 静态方法:在创建对象的时候,执行,是真正创建对象的方法,在方法中必须有return,如果没有return则不会执行init初始化方法,也不能成功创建对象。
(2)init : 在new执行完毕之后,对对象进行初始化的方法。
(3)del :当对象销毁的时候会自动调用方法。
(4)str :当调用内建函数str() format print会自动调用的方法,返回值是str
(5)repr :如果方法中没有定义str,却需要调用str,默认调用repr
(6)bytes :在调用bytes()方法时自动调用
5.动态属性操作
(1)hasattr(obj,name)
(2)setattr(obj,name,value)
(3)getattr(obj,name)
(2)(3)给对象进行动态赋值
(4)delattr(obj,name)
删除obj中的name属性