面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

面向过程

核心是过程,过程指的是问题的解决步骤,即先干什么再干什么,基于面向过程去设计程序就好比设计一条流水线,是一种机械式的思维方式

优点:复杂的问题流程化,进而简单化

缺点:可扩展性差

面向对象

核心是对象,对象就是特征与技能的结合体,如果把设计程序比喻成创造一个世界,那你就是这个世界的上帝,与面向过程对机械流水线的模拟形成鲜明的对比,

面向对象更加注重的是对现实世界的模拟

优点:可扩展性高

缺点:极易出现过度设计

一系列对象相似的特征与技能的结合体

在现实世界中,先有一个个具体存在的对象,随着发展,总结相似之处,得到现实中的类

在程序中,一定是先定义类,后调用类来产生对象

 

第一阶段:由现实中的对象,总结出现实中的类

obj1:

    特征

         学校=oldboy

         名字=李

         年龄=18

         性别=女

    技能

        学习

        吃饭

obj2:

    特征

         学校=oldboy

         名字=张

         年龄=28

         性别=男

    技能

        学习

        吃饭

obj3:

    特征

         学校=oldboy

         名字=牛

         年龄=18

         性别=女

    技能

        学习

        吃饭

 

类就是现实中的老男孩学生类:

    相似的特征

        学校=oldboy

    相似的技能

        学习

        吃饭

第二阶段:程序中的类产生程序中的对象

class OldboyStudent:           # 定义了类,类体中的代码在类定义阶段就会执行

    school = ‘oldboy‘      # 特征 ,类的数据属性

    def learn(self):         # 技能,类的函数属性

        print(‘is learning‘)

    def eat(self):

        print(‘is eating‘)

 

print(OldboyStudent.__dict__)     # 查看类的 名称空间(用来存放类中的变量名和函数名)

#通过字典访问里面的属性

print(OldboyStudent.__dict__[‘school‘])

print(OldboyStudent.__dict__[‘learn‘])

#python提供了访问属性的语法

print(OldboyStudent.school)

print(OldboyStudent.learn)

OldboyStudent.learn(123)

#新增属性

OldboyStudent.x=11111

OldboyStudent.school=‘Oldboy‘

print(OldboyStudent.__dict__)

#删除属性

del OldboyStudent.school

print(OldboyStudent.__dict__)

对象

如何产生程序中的对象?类名加括号,调用类,产生一个该类的实际存在的对象,该过程称为实例化,产生的结果又可以称为实例

obj1=OldboyStudent()

obj2=OldboyStudent()

obj3=OldboyStudent()

产生了3个相同的对象,因为并没有使用__init__()

class OldboyStudent:          

    school = ‘oldboy‘      

    def __init__(self,name,age,sex):   # 只在实例化的时候执行,在对象产生之后才会执行

        if not isinstance(name,str):

            raise TypeError(‘名字必须是字符串类型‘)

        self.name=name

        self.age=age

        self.sex=sex

    def learn(self):       

        print(‘%s is learning‘ % self.name)

    def eat(self):

        print(‘is eating‘)

 

obj1=OldboyStudent(‘李‘,18,‘女‘)

#两步:1.先生成一个空对象 2.连同空对象和后面的三个参数,组成一组(obj1,‘李‘,18,‘女‘)传给__init__(),相当于 OldboyStudent.__init__(obj1,‘李‘,18,‘女‘)

print(obj1.name)  # obj1.__dict__[‘name‘]

obj1.name=‘网‘

print(obj1.name)

 

print(obj1.school,id(obj1.school))

print(obj2.school,id(obj2.school))

print(obj3.school,id(obj3.school))

print(OldboyStudent.school,id(OldboyStudent.school))

#以上4个完全相同,就是同一个 

#对象可以访问类的数据属性,类的数据属性是共享给所有对象使用的,id都一样

 

#类的函数属性

OldboyStudent.learn(obj1)

print(obj1.learn)   #绑定方法

print(OldboyStudent.learn)   # 函数属性

 

obj1.learn()   # OldboyStudent.learn(obj1)  

#绑定方法的特殊之处在于,绑定给谁,就由谁来调用,谁来调用,就把谁当作第一个参数传入

统计

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

224 面向对象编程介绍,面向过程与面向对象

面向对象-面向对象和面向过程的区别

面向对象分析与设计面向对象设计包括哪些内容

面向对象

面向过程面向对象及面向对象的三大特征

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景)