博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四十一篇 面向对象基础
阅读量:5123 次
发布时间:2019-06-13

本文共 2309 字,大约阅读时间需要 7 分钟。

面向对象

一、面向过程和面向对象

1、面向过程编程(思想)

1.上一个函数的输出是下一个函数的输入,类似流水线,机械式、顺序化

2.优点:逻辑清晰,将复杂的问题流程化,细化、步骤化,进而简单化

3.缺点:可扩展性差

2、面向对象编程(思想)

1.对象:特征和技能的结合体

2.优点:可扩展性强

3.缺点:逻辑复杂

二、类与对象

1.类(类别):一系列具有相同特征和技能的对象

2.现实世界中是先有对象,后有类

# 比如现实世界中,先发现了各种各样的生物,才由人类去将这些生物分类为:非细胞生物、原核生物、真核生物。# 再细分可以分成:动物、植物、微生物(包含细菌、真菌、病毒等等)...# 比如一个学校中的老师和学生:可以将他们分在同一个学校类中...

3.python中先有类,再有对象

# 如何定义一个类# 类名用驼峰体。定义类时,会直接运行类中的代码(但是里面的函数也属于定义阶段,并不会直接运行)class 类名:       # 定义一系列特征    school = 'oldboy'    # 定义一系列方法    def choose(self,course):        print('math')# 通过类实例化一个具体对象(类是抽象的)对象 = 类名()

三、给对象定制独有的特征

1.对象本质近似于类,也是一个名称空间,但是对象的名称空间存放对象独有的属性,而类中存放的时对象们共有的属性

# 定义一个动物类class Animal:    anything_attribute = 'animal'    count = 0        def __init__(self,character,height,weight):        self.character = character        self.height = height        self.weight = weight        Animal.count += 1            def habit(self,food):        print(f'{self.character} ent {food}')# 实例化一个动物对象people = Animal('person',180,68)print(people.__dict__)people.habit('rice')'''{'character': 'person', 'height': 180, 'weight': 68}person ent rice'''# 实例化第二个动物对象purp = Animal('dog',60,30)   # purp 是小狗的意思print(purp.height)purp.habit('bone')  '''60dog ent bone'''# 每定义一个实例对象,都会自动调用__init__()print(Animal.count)   # 2

四、对象的属性查找顺序

先从对象本身开始查找,如果没有就去类中找,类中没有则会报错

class Animal:    anything_attribute = 'animal'        def __init__(self,character,height,weight):        self.character = character        self.height = height        self.weight = weight            def habit(self,food):        print(f'{self.character} ent {food}')people = Animal('person',180,68)print(people.anything_attribute)   # animal

五、类与对象的绑定方法

1.类名称空间中定义的数据属性和函数属性都是共享给所有对象共同使用的

2.对象名称空间中定义的只有数据属性,而且是该对象所独有的

3.注意:类中定义的函数,如果是类来使用,则需要按照函数的参数规则传值,是几个参数,就传几个;而如果是实例化了的对象来使用,则只需要传除 self 参数之外的参数。因为 self 就是对象本身

class person:    def habit(self):        print(f'ent rice')person.__dict__['habit']('jojo')   # ent rice

六、类与数据类型

list其本质就是一个类,我们可以通过列表调用它内部的许多方法,且定义出来的列表对象之间,进行方法调用时,互不影响

# 演示list就是类l1 = list([1,2,3,4])# list()中有append()方法list.__dict__['append'](l1,5)print(l1)  # [1, 2, 3, 4, 5]lis1 = list([1,2,3])lis2 = list([1,2,3])list.append(lis2,4)print(lis1)   # [1, 2, 3]print(lis2)   # [1, 2, 3, 4]

七、对象的高度整合

对象会有一大堆属性/数据,还会有一大堆方法来操作这些属性,然后对于不同的对象,这些属性又不同

转载于:https://www.cnblogs.com/itboy-newking/p/11046724.html

你可能感兴趣的文章
使用客户端对象模型读取SharePoint列表数据
查看>>
NYOJ 289 苹果(01背包)
查看>>
【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)
查看>>
Day39:threading模块、ThreadLocal
查看>>
[Leveldb源码剖析疑问]-block_builder.cc之Add函数
查看>>
POJ 1328 Radar Installation 贪心
查看>>
约法三章
查看>>
canvas合成图片 圣诞节新技能戴帽
查看>>
JavaScript快速入门(四)——JavaScript函数
查看>>
css调用外部字体
查看>>
The Last Practice
查看>>
c#序列化和反序列化
查看>>
使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之一
查看>>
互评Beta版本(Hello World!——SkyHunter)
查看>>
c语言编写单片机技巧
查看>>
Visual Studio调试之断点基础篇
查看>>
使用requests模块简单获取数据
查看>>
MySQL5.7参数log_timestamps
查看>>
Oracle创建表_01
查看>>
硬件设计--DC/DC电源芯片详解
查看>>