python基础学习第八次

方法没有重载
在其他语言中,可以设置多个重名的方法,只要保证方法签名唯一即可,方法签名包含三个部分:方法名,参数数量,参数类型
Python中,方法的参数没有类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,python中是没有方法的重置的。定义一个方法即可有多种调用方式,相当于实现了其他语言中方法的重载。
如果我们在类体中定义了多个重名的方法,最后只有一个方法有效。
建议:不要使用重名的方法,python中方法没有重载。
在这里插入图片描述
方法的动态性

python是动态语言,我们可以动态的为类添加新的方法,或者动态的修改类的已有的方法。

在这里插入图片描述

私有属性和私有方法(实现封装)
在这里插入图片描述
在这里插入图片描述
私有方法
在这里插入图片描述

@property装饰器
@property可以将一个方法的调用方式变成”属性调用“。
在这里插入图片描述
面向对象的三大特征
python是面向对象的语言,也支持面向对象编程的三大特征:继承,封装(隐藏),多态。
在这里插入图片描述

继承
继承是面向对象程序设计的重要特征,也是实现“代码复用”的重要手段。
如果一个新类继承自一个设计好的类,就直接具备了已有类的特征,就大大降低了工作难度。已有的类,通常称之为“父类或者基类”,新的类,通常称为“子类或者派生类”。

Python支持多重继承,一个子类可以继承多个父类,继承的语法格式如下:
class 子类类名(父类1[,父类2,…]
类体
如果在类定义中没有指定父类,则默认父类是object类,也就是说,object是所有类的父类,里面定义了一写所有类共有的默认实现,比如:new()。
定义子类时。必须在其构造函数中调用父类的构造函数,调用格式如下:
父类名.init(self,参数列表)
在这里插入图片描述
子类可以继承父类的私有属性,但是不能直接使用,
在这里插入图片描述
注意:如果要子类继承父类的属性的话,必须要显示的调用父类进行初始化,不然解释器不会去调用。

类成员的继承和重写
1 成员继承:子类继承了父类除构造方法之外的所有成员。
2 方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类的方法,也称为重写。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

object根类

object根类时所有类的父类,因此所有的类都有object类的属性方法。显然有必要深入研究一下object类的结构,对于继续深入学习Python有好处。

dir()查看对象的属性
此函数可以让我们方便的看到指定对象的所有的属性。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
显然,object类要要比student类要少,但是object类有的属性,其子类全部拥有。

重写str()方法

在这里插入图片描述

多重继承
python支持多重继承,一个子类可以有多个“直接父类”,这样,就具备了“多个父类”的特点。但是由于这样会被“类的整体层次”搞得异常复杂,所以尽量避免使用。

MRO()方法
Python支持多重继承,如果父类中有相同名字的方法,在子类没有指定父类时,解释器将“从左向右”按顺序搜索。
MRO(Method Resolution Order):方法解析顺序。我们可以通过mro()方法获得“类的层次结构”,方法解析顺序也是按照这个“类的层次结构”寻找的。
在这里插入图片描述

super()获取父类定义
在子类中,如果想要获取父类的方法时,我们可以通过super()来做。super()代表父类的定义,而不是父类对象。
在这里插入图片描述

多态
多态是指同一个方法调用由于不同对象可能会产生不同的行为。
关于多态要注意两点
多态是方法的多态,属性没有多态
多态的存在有两个必要条件:继承,方法重写。

在这里插入图片描述
在这里插入图片描述

特殊方法和运算符的重载

Python的运算实际上是通过调用对象的特殊方法实现的。
在这里插入图片描述
在这里插入图片描述
特殊属性

python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性和特殊用法,下面是常见的特殊属性。
在这里插入图片描述
对象的浅拷贝和深拷贝 内存分析
变量的赋值操作
只是形成两个变量,实际还是指向同一个对象。
浅拷贝
Python拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。
深拷贝
使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有子对象也不同。

组合:
“is-a”关系,可以使用“继承”,从而实现子类拥有的父类的方法和属性,“is-a”关系指的是类似这样的关系:狗是动物,dog is animal,狗类就应该继承动物类。
“has-a”关系,我们可以使用“组合”也能实现一个类拥有另外一个类的方法和属性,“has-a“关系指的是这样的关系:手机拥有CPU. Mobilephone has a CPU.
0
在这里插入图片描述

在这里插入图片描述

设计模式—工厂模式实现
设计模式是面向对象语言特有的内容,是面临某一类问题时候固定的做法,设计模式有很多种,对于初学者,我们学习两种最常用的模式:工厂模式和单例模式。
工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类,创建对象进行统一的管理和控制。

# 测试工厂模式

class Carfactory:
    def create_car(self, brand):
        if brand == "奔驰":
            return Benz()
        elif brand == "比亚迪":
            return BYD()
        elif brand == "宝马":
            return BMW()
        else:
            return "未知品牌,无法创建"


class Benz:
    pass


class BMW:
    pass


class BYD:
    pass


factory = Carfactory()
c1 = factory.create_car("奔驰")
c2 = factory.create_car("宝马")
print(c1)
print(c2)
<__main__.Benz object at 0x00000183299E5B70>
<__main__.BMW object at 0x00000183299FC320>

Process finished with exit code 0

单例模式实现

单例模式的核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点。
单例模式只生成一个实例对象,减少了对系统资源的开销。当一个对象的产生需要比较多的资源,如读取配置文件,产生其他依赖对象时,可以产生一个”单例对象“,然后永久驻留内存中,从而极大的降低开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值