面向对象总结:
面向对象
概述
面向过程:关心解决问题的步骤(实现)。 算法 + 数据结构
面向对象:关心解决问题的人。 对象 + 交互
抽象:从多个事物中,舍弃个性非本质的特征,
抽离出共性与本质的过程。
类和对象
对象:大杯子 小杯子 中杯子
具体的 实例(个体)
类:杯子(数据:高度 行为:盛水)
抽象的 概念(类别)
成员:
实例成员(变量、方法):对象的
类成员(变量、方法):大家的
静态方法:略
三大特征:
封装:【分】 分而治之、变(行为)则疏之.
标准:高内聚低耦合
继承:【隔】抽象 --> 统一 --> 隔离
多态:【执】重写(覆盖) 通过调用父,执行子。
六大原则:
开闭原则:(目标) 增加新功能,不修改客户端代码.
单一职责:一个有且只有一个改变的原因.
依赖倒置:调用父(稳定、抽象),不要调用子(多变,具体).
组合复用:不要用继承(是一种)复用,多用组合(有一个)复用。
组合关系连接客户端代码与多变的功能
人 火车/飞机..等交通工具
员工管理器 程序员/测试员..等员工
继承关系抽象多变的功能
员工 --> 程序员/测试员
里氏替换:看见爸爸可以传递儿子
儿子替换爸爸后依然可以工作(扩展重写)
迪米特法则:低耦合
单列模式:
class A: #同一个对象,可修改属性数据 后续实例化属性数据,相当于修改的对象都是第一个对象 多个变量指向一个对象
def __new__(cls, *args, **kwargs):
if not hasattr(cls, ‘_instance‘):
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == ‘__main__‘:
a = A(‘li‘, 24)
b = A(‘lu‘, 25)
print(id(a), a.name)
print(id(b), b.name)
>>>140585962612104 lu
>>>140585962612104 lu
class A: #同一个对象,不可修改属性数据
_isfirst=True
def __new__(cls, *args, **kwargs):
if not hasattr(cls, ‘_instance‘):
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self, name, age):
self.name = name
self.age = age
if __name__ == ‘__main__‘:
a = A(‘li‘, 24)
b = A(‘lu‘, 25)
print(id(a), a.name)
print(id(b), b.name)
>>>139731384149160 li
>>>139731384149160 li
策略模式:
class B:
def kill(self):
print(‘杀人‘)
class B1(B):
def kill(self):
print(‘用枪杀人‘)
class B2(B):
def kill(self):
print(‘用刀杀人‘)
class B3(B):
def kill(self):
print(‘用剑杀人‘)
b1 = B1()
b2 = B2()
b3 = B3()
def func(B):
# 要B的对象,实际可以传入子类的对象,实际执行子类重写的kill()方法
B.kill()
func(b1)
func(b2)
func(b2)
>>>用枪杀人
>>>用刀杀人
>>>用刀杀人
各种设计模式:
三大特征/六大原则的使用;父类统筹抽象概念化,子类重写多态化,调用抽象父类,实际传入子类,执行子类方法
父类可以作为调用者的属性参数传入使用,
class A:
pass
class B(A):
pass
class C(A):
pass
class D(A):
pass
实例化方法init的传入参数
class Manager:
def __init__(self,A):
pass
init的私有变量
class Manager:
def __init__(self):
self.a=A
实例方法的传入参数
class Manager:
def __init__(self):
pass
def func(self,A):
pass
实例方法的私有变量
class Manager:
def __init__(self):
pass
def func(self):
a=A
pass
python:一切皆对象,对象都可赋值给变量,作为函数/类的参数或返回值
原文:https://www.cnblogs.com/chenlulu1122/p/11922128.html