python基础--面向对象

定义

金典

class 类名:
    类的实现

这种方式在python2中没有父类

在python3中默认继承object

新式

class 类名(object):
    类的实现

这种方式在python2中和python3中都继承object

创建对象

变量 = 类名(参数…)

属性

对象的属性

self.属性

对象.属性

对象.__dict__:打印该对象内部全部对象属性的字典形式

类的属性

类对象可以访问类属性。类名.类属性

实例对象可以访问类属性,对象名.类属性

实例对象修改类属性,实际上是创建了一个新的实例属性,所以实例对象不能直接修改类属性

类属性访问,修改探索

方法

魔法方法

在特定时候,自动执行
* __init(self)__
* 创建对象之后立即执行
* 一般用于初始化对象属性
* 该函数主要用于初始化的,默认返回None,也可以手动返回,但是手动返回也只能返回None,返回其它会报错
* __new(cls)__
* 创建对象使用,用于创建对象
* 控制是否创建对象
* __str(self)__
* 打印对象的时候自动调用
* 封装类的描述信息,必须有返回值,而且返回值必须是字符串
* __del(self)__
* 发现对象销毁的时候,自动执行
* 作用:
* 验证对象是否销毁
* 用于释放对象占用的资源

类方法

@classmethod
def 方法名(cls):
    cls代表的是类对象
    cls.类属性  # 可以直接访问类属性并修改

实例方法

def 方法名(self):
    self代表的是实例对象

类方法的中的cls,实例方法中的self,可以任意改成其他名称,不过官方推荐和使用习惯上是cls和self。

他们必须出现在形参列表的第一个

静态方法

@staticmethod
def 方法名():
    方法体

静态方法是使用类管理的产物,将一些和类对象与实例对象无关的方法封装起来,相当于java中静态类的方法作用

类对象和实例对象访问这几种方法的时候注意:

  • 类和对象都可以直接访问调用静态方法
  • 类可以直接调用类方法和静态方法
  • 类调用对象方法,必须指明特定对象,格式:类名.方法名(实例对象)

特性

封装

就是把客观事物封装成抽象的类

继承

指可以让某个类型的对象获得另一个类型的对象的属性的方法

python2/3区别

python2
+ 写明继承对象(object),是新式类
+ 没有写明继承对象,无继承

python3
+ 写明继承对象或者不写明都是继承自object

重写

子类中定义和父类中方法名相同的方法,产生覆盖效果

* 手动调用父类方法*
+ 父类.父类方法(子类对象)
+ super().父类方法()
+ super(子类名,子类对象).方法名()

私有属性

私有属性在子类不能使用,也即是子类不会继承父类的私有属性

格式:在属性名前面加“__”(两个下划线)

多继承

MRO算法:python里专门用于处理获取父类方法顺序的算法

子类名.mro:获取继承顺序

父类.父类方法(子类对象):指定父类执行方法

子类手动调用父类方法

  • 方式1:父类名.父类方法名(self)
  • 方式2:super().父类方法():这里如果是多继承的子类,按照MRO算法顺序查找,python2不支持
  • 方式3:super(子类名,self).方法名():python3支持。python2的新式类支持(推荐)

多态

是指一个类实例的相同方法在不同情形有不同表现形式

传入不同的子类对象,调用相同的父类方法,产生不同的结果

增加代码的灵活度

是以继承和重写为前提的

逻辑工具

is a

代表继承关系,is前面是子类

has a

代表属性关系,a后面的是属性

扩展或难点

类对象、实例对象创建与执行顺序探索

类对象、实例对象创建与执行顺序探索

newinit方法的执行顺序

__new__和__init__方法的执行顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值