> 文章列表 > 4.1 面向对象名词解释(草稿)

4.1 面向对象名词解释(草稿)

4.1 面向对象名词解释(草稿)

4.1.1 面向对象与面向过程

解决问题的两种思路

面向对象

面向过程

概念

将构成问题的事物,分解成若干个对象把数据以及对数据的操作放在一起,作为一个相互依存的整体

比如moba游戏里每个英雄(类)有不同的技能(方法)和外形(属性),你创建了一个账号,你玩的每个英雄又是独一无二的(实例化),他们都有自己的属性和方法。

是一种代码封装的方法,将相关数据和实现函数封装到一起

直接将步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用

举例

把大象放冰箱

大象类:

鼻子长(属性)

能被放进冰箱(方法3)

冰箱类:

有门(属性)

门能被打开(方法1)

门能被关上(方法2)

主函数:

创建一只叫小明的大象(类的实例化)

创建一个叫小红的冰箱(类的实例化)

小红执行方法1

小明执行方法3

小红执行方法2

把大象装冰箱的步骤:

  1. 打开冰箱门
  2. 把大象装进去
  3. 关门

这里的每个步骤依次用函数实现,然后再依次调用

4.1.2 对象,类,实例

名词

对象

实例

概念

一切皆对象

抽象的模板,类似工厂生产前的模具,一类事物的统称

根据模板(模具)创建出来的具体对象,一类事物中的具体一个

具体

类,实例,方法,函数...都是对象

对象=属性+方法

静态属性(特性,形容词)

动态方法(能干啥,动作)

  1. 人类是一个类,动物类是一个类
  2. 创建一个对象,要先创建一个类
  3. 就像生产产品要先造个模板

杨幂是人类的一个实例,我家养的猫是动物类的一个实例

修改/增加一个对象的属性,这个类其他对象的属性值不变

应用

a = [1,2,3]

print(type(a))

<class ‘list’>

列表类的实例对象

class 类名:(类名首字母大写)

属性1

属性2

def 方法1(self):

函数内容

属性3

def 方法2(self):

函数内容

实例 = 类名()

4.1.3 函数,方法,参数,属性

名词

函数

方法

参数

属性

概念

  1. 具有特定功能的代码块
  2. 普通函数与函数之间没有联系
  1. 写在类里的函数
  2. 一个对象所能做的事情
  3. 同一个类的方法之间是有联系的,相当于兄弟
  4. 类似动词

1.形式参数:在定义函数时,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参”

2.实际参数:在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参”

  1. 写在类里的形参
  2. 一个对象具有的(描述的),静态的特征:
  3. 类似形容词

举例

dir(实例名): 查看实例的所有属性和方法

行为能力

狗会叫,还会咬人,还会吃东西

人类这个类来说

人有两个眼睛,一个鼻子,一张嘴

应用(定义)

def 函数名():

函数内容

class 类名:(类名首字母大写)

属性1

属性2

def 方法1(self):

函数内容

属性3

def 方法2(self):

函数内容

class 类名:(类名首字母大写)

属性1

属性2

def 方法1(self):

函数内容

属性3

def 方法2(self):

函数内容

应用(调用)

函数名()

方法的调用:

实例名.方法名()

属性的调用:

实例名.属性名

4.1.4 类方法,静态方法

一个装饰器只管一个方法

类方法 静态方法 实例方法
定义 类具有的方法,大家都有的特征 本质上是函数 与类没有太多联系,与每个具体实例无关 不是装饰器修饰的,类里本身的方法
装饰器(声明下面的方法是什么方法) @classmethod @staticmethod
调用 类调用 & 实例调用 类调用 & 实例调用 实例调用(只能)
类型 method function method

4.1.5 私有属性,私有方法,魔术方法,单下划线的方法

私有属性(__属性名)

私有方法(__方法名)

魔术方法(__方法名__)

_方法名

定义

写在类里:不能通过对象直接访问,

不能从外部调用

不能被子类继承

可以在本类内部访问;但是要构造另一个函数来调用

前后都有双下划线__,如__init__

是object自带的,指的是python内置的方法或属性

尽量不要乱调用

写法

__属性(双下划线)

__方法(双下划线)

_str(单下划线)

意义

用来处理类的内部事情,不通过对象处理,起到安全作用。

4.1.6 封装、继承与多态

封装

继承

多态

组合

创建对象之前,通过类把相关属性和方法打包到一起,然后通过类生成相应的对象

  • 支持使用现有类的所有功能,并在无需重新编写代码的情况下,扩展这些功能
  • 通过继承创建的新类称为子类,被继承的类为父类(基类,超类)

不同的类中有同名的方法,调用方法时,根据对象的不同,实现的操作也不同,

举例

class A:

x = 520

def hello(self):

print('你好')

class B(A):

pass

b = B()

b.x

b.hello()

同名的方法‘叫’,调用鸡的‘叫的方法’为鸡叫,调用鸭‘叫’的方法为鸭叫

class Turtle:def say(self):print('不积跬步无以至千里')
class Cat:def say(self):print('喵喵')
class Dog:def say(self):print('yoho;')
class Garden:t = Turtle()c = Cat()d = Dog()def say(self):self.t.say()self.c.say()self.d.say()
g = Garden()
g.say()
# 不积跬步无以至千里
# 喵喵
# yoho;

覆盖:class B(A):

x = 888

def hello(self):

print('你好,我是b')

b = B()

b.x

isinstance(b,B) # 判断对象是否属于某个类

isinstance(b,A)

(结果都是True)

issubclass(A,B) # 判断一个类是否是另一个类的子类

issubclass(B,A) # 前者false后者true

多重继承: