day24 面向对象进阶

发布时间 2023-12-20 15:12:42作者: Junior_bond

day24开始
2023年12月20日 周三 12:25:36
类的组合:把类对象当做变量值、参数、返回值、容器元素使用,这样可以间接使用类对象的方法
class F1:
pass
class F2:
pass

f1=F1()
f2=F2()
f1.f2=f2#等号前面的f2是f1属性的名字(key) 等号后面的f2是F2类实例化出来的一个对象(value) 现将f2赋值给f1.f2那么 f1.f2也是F2类的一个对象
print(f1.__dict__)


打印结果:
{'f2': <__main__.F2 object at 0x00000165D4340DD0>}

菱形继承:
新式类:广度优先 老祖宗最后查 继承了object类的类 py3里面都是新式类
经典类:深度优先 一路查到底

多态与多态性:
多态:体现在定义阶段 鸭子必须长的像鸭子 也必须叫得像鸭子
多态性:体现在调用阶段 只要长得像鸭子 叫得像鸭子的对象就一定会叫


类的封装:类内部可以访问 类外部不可以访问 (定义阶段)
实现方法:在不想被访问的对象(属性、方法)前面加__
对类属性封装的作用:保护了隐私 增强了安全性
对类方法封装的作用:精简了代码 简化了使用
class people():
__count=2
print(__count)

print(people.__count)

打印结果:
2
Traceback (most recent call last):
File "F:\pylearn\day24\test.py", line 6, in <module>
print(people.__count)
^^^^^^^^^^^^^^
AttributeError: type object 'people' has no attribute '__count'

 

装饰器:@property 获取方法返回值的时候触发 并且只能有self一个参数
用了后调用方法不需要加括号


类和对象的绑定方法和非绑定方法:

没有被任何装饰器修饰的方法都是对象的绑定方法 这类方法是专门为类定制的
通过对象调用绑定到对象的方法时会有一个自动传值的过程,即自动把当前对象传给方法的第一个参数self(约定俗成写成self);
若类需要调用绑定到对象的方法时需要给self手动传值。

类中使用 @classmethod 修饰的方法就是绑定到类的方法
在类内部使用 @staticmethod 修饰的方法即为非绑定方法,这类方法和普通定义的函数没有区别,不与类或对象绑定,谁都可以调用,且没有自动传值的效果

2023年12月20日 周三 15:09:10