第八章

方法没有重载,在python中,后面定义的同名方法会覆盖前面的方法
私有属性和私有方法(实现封装)
python对于类的成员没有严格的访问限制。2个下划线开头的属性是私有的,类内部可以访问私有属性,外部不能直接访问,但是可以通过_类名_私有属性名访问
在这里插入图片描述
@property装饰器
@property可以将一个方法的调用方式变成“属性调用”,一般用来给属性增加get和set方法

封装,多态,继承
封装:
隐藏对象的属性和细节,只对外提供必要的方法。相当于把细节封装起来,只对外暴露相关调用方法,就比如设计一款手机,设计的细节用户没必要知道。用户只需要用法就可以了。python没有严格的语法级别的访问控制符,更多依靠程序员自觉实现
继承:
继承可以让子类具有父类的特性,提高了代码的重用性
多态:
同一个方法调用对象,由于对象不同,会产生不同的行为。就比如张三的休息是睡觉,李四的休息是玩游戏,程序员的休息是敲代码

继承:
在这里插入图片描述
class 子类类名(父类1[,父类2,…]) #一个子类可以继承多个父类。
如果类定义中没有指定父类,则默认父类是object,object是所有类的父类。里面定义了一些所有类拥有的默认实现,比如__new__()
在这里插入图片描述

Class Person:
def init(self,name,age):
self.name = name
self._age = age
def say_age(self):
print(“我的年龄”,self._age)
def say_introduce(self):
print(“名字”,self.name)
class Student(Person): # 子类
def init(self,name,age,score):
Person.init(self,name.age)
self.score = score

def say_introduce(self):
	“”“重写了父类的方法”“”
	print("1")

s = Student(“zhangsan”,16,90)
s.say_age()
s.say_introduce()

mro:输出这个类的继承层次结构

在这里插入图片描述
在这里插入图片描述
object根类。所有的类都有object的方法和属性。
dir()查看对象属性。
class Person:
def init(self,name,age):
self.name = name
self.age = age
def say_age(self):
print(self.name,“的名字是”,self.age)
obj = object()
print(dir(obj))

s2 = Person(“zhangsan”,18)
print(dir(s2))
执行结果:

我们可以看到s2有一些除object属性之外的其他属性。

重写__str__()方法。

str():返回一个对于对象的描述。
Class Person:
def init(self,name):
self.name = name
p = Person(“zhangsan”)
print§
在这里插入图片描述
Class Person:
def init(self,name):
self.name = name
def str(self):
return “name is{}”.format(self.name) #重写
p = Person(“zhangsan”)
print§
在这里插入图片描述

多重继承

python支持多重继承,一个子类可以有多个“直接父类”。这样就具备多个父类的特点,但是这样会被类的整体层次搞得很复杂,尽量避免使用
class A:
def aa(self):
print(“aa”)
class B:
def bb(self):
print(“bb”)
class C(B,A):
def cc(slef):
print(“cc”)

mro()

如果父类中有相同名字的方法,在子类没有指定父类名时,解释器将从左向右顺序搜索
在这里插入图片描述

super()获得父类的定义

在子类中,如果想获得父类的方法,可以通过super(),super()代表父类的定义,不是父类的对象。

在这里插入图片描述

多态:

同一个方法,条用由于对象不同,可能会长生不同的行为。比如:张三的休息是睡觉,李四的休息是玩游戏。
注意:多态指的是方法的多态,属性没有多态。
多态2个必要条件:继承和方法重写
在这里插入图片描述

特殊方法和运算符重载

在这里插入图片描述
20和30本身就是2个对象,使用a+b的时候,其实就是a.__add__b。其实运算符都是方法,比如+ == add
常见的特殊方法:
在这里插入图片描述
运算符的重载:

!](https://img-blog.csdnimg.cn/20200523000456955.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2NTE5MDM2,size_16,color_FFFFFF,t_70)

特殊属性:

Python对象包含了很多双下划线开始和结束的属性,都是特殊属性,有特殊的用法,常见的特殊属性:
在这里插入图片描述

组合:

“is-a”关系,我们可以使用继承,从而实现子类拥有父类的方法和属性,类似于狗和动物的关系
“has-a”关系,我们可以使用组合,实现一个类拥有另一个类的方法和属性,类似于手机又cup
在这里插入图片描述

设计模式_工厂模式实现和单例模式

GOF23中设计模式。2中最常见的:工厂模式和单例模式
工厂模式:
可以帮助我们实现创建者和调用者的分离,使用专门的工厂类将选择实现类,创建对象进行统一的管理和控制

class CarFactory: #定义一个工厂类,通过工厂类创建车的对象
def creat_car(self,brand):
if bread == “Benz”:
return Benz()
elif brand == “bmw”:
return bmw()
elif brand == “BYD”
return BYD()
else:
return"未知品牌无法创建"
class Benz:
pass
class bmw:
pass
class BYD:
pass
factory = CarFactory():
c1 = factory()

单例模式实现

单例模式核心作用是确保一个类只有一个实例,并且提供一个访问该实例的全局访问点,也就是说只生成一个实例对象,减少了对系统资源的开销,当一个第项的产生需要比较多的资源,可以只产生一个实例。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值