zoukankan      html  css  js  c++  java
  • Day7 面向对象和类的介绍

    面向对象讲解:

    ‘’‘

    面向过程:

    核心是过程二字,过程指的是问题的解决步骤,基于过程去设计程序,就好比在设计一条流水线,是一种机械式的思维方式。

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

    缺点:可扩展性差

    应用场景:脚本程序,比如说linux系统管理

    面向对象:

    核心是对象二字,对象就是特征与技能的结合体。如果把设计程序比喻成创造一个世界,那你就是这个世界的上帝,与面向过程对机械流水的模拟,面向对象更加注重对现实世界的模拟。

    优点:可扩展性强

    ’‘’

    类即种别,类别,对象是特征与技能的结合体,那么类就是一系列对象相似的特征与技能的集合体。

    在现实世界中,先有一个个具体存在的对象(总结相似之处),得到现实中的类。

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

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

    obj1:

      特征:学校=oldboy,名字=李大泡,年龄=18,性别=女

      技能:吃饭,学习,睡觉

    obj2:

      特征:学校=oldboy,名字=张全丹,年龄=28,性别=男

      技能:吃饭,学习,睡觉

    obj1:

      特征:学校=oldboy,名字=牛柳蛋,年龄=18,性别=女

      技能:吃饭,学习,睡觉

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

    1 class OldboyStudent:
    2     school = 'oldboy' #类的数据属性
    3     def learn(self): #类的函数属性
    4         print('is learning')
    5 
    6     def eat(self):
    7         print('is eating')
    8     print('======>')
    类体的代码在类定义阶段就会执行,理所应当会产生类的名称空间,用__dict__属性查看
    1 print(OldboyStudent.__dict__)
    2 print(OldboyStudent.__dict__['school'])
    3 print(OldboyStudent.__dict__['learn'])

    定义完了,调用的方法为:

    print(OldboyStudent.school)
    print(OldboyStudent.learn)

    调用类里边的函数属性时,如果要加上结果,需要在调用的时候在括号内加值。

    # OldboyStudent.learn(123)


    修改类的属性#
    OldboyStudent.x=1111111111111111111111

    # OldboyStudent.school='Oldboy'
    # del  OldboyStudent.school
    # print(OldboyStudent.__dict__)

    另外一种方法,但是不推荐这么做:
    # OldboyStudent.__dict__['x']=1111111111111111111111



     

    产生程序中的对象:

    类名加括号,产生一个该类的实际存在的对象,该调用过程称为实例化。

    可以再init中加上类型检查。

    eg:

     1 class OldboyStudent:
     2     school = 'oldboy'         #类的数据属性
     3     #obj1,'李大炮',18,'女'
     4     def __init__(self,name,age,sex): #(类的函数属性)在实例化时,产生对象之后执行
     5         # if not isinstance(name,str):
     6         #     raise TypeError('名字必须是字符串类型')
     7         self.name=name
     8         self.age=age
     9         self.sex=sex
    10         # return None #__init__方法必须返回None
    11         #obj1.name='李大炮'
    12         #obj1.age=18
    13         #obj1.sex='女'
    14 
    15     def learn(self):
    16         print('is learning')
    17 
    18     def eat(self):
    19         print('is eating')
    对象可以访问类的数据属性,结论:类的数据属性共享给所有对象使用,id对一样
    print(obj1.school,id(obj1.school))
    print(obj2.school,id(obj2.school))
    print(obj3.school,id(obj3.school))
    print(OldboyStudent.school,id(OldboyStudent.school))


     

    类的函数属性是绑定给所有对象使用的,绑定给不同的对象是不同的绑定方法,绑定方法有何特殊之处? 暂且抛开绑定方法,类肯定可以访问自己的函数属性
    OldboyStudent.learn(obj1)
    OldboyStudent.learn(obj2)
    OldboyStudent.learn(obj3)
    绑定方法:绑定给谁,就由谁来调用,谁来调用就把“谁”本身当做第一个参数传入
    obj1.learn() #OldboyStudent.learn(obj1)
    obj2.learn() #OldboyStudent.learn(obj1)
    obj3.learn() #OldboyStudent.learn(obj1)
    属性查找顺序:先从对象的__dict__中找,然后到类的__dict__中找,然后父类.... OldboyStudent.school='哈佛'
    OldboyStudent.school='哈佛'
    obj1.school='hahahahahahahhahahahahahah'
    print(obj1.__dict__)
    print(obj1.school)
    
    print(obj2.school)
    print(obj3.school)
  • 相关阅读:
    总结:使用pll来进行“异步复位,同步释放”
    总结“异步复位,同步释放”
    用quartusII再带的modelsim进行后仿真(时序仿真)的操作步骤
    Notepad++新建文件默认保存格式修改问题
    英语翻译正确的思维
    浅谈web网站架构演变过程
    MVC-API(二)
    C#面向对象编程的基础
    C# 堆栈讲解
    AutoCAD 2013 之R14版本下载地址整理汇总
  • 原文地址:https://www.cnblogs.com/sexiaoshuai/p/7359062.html
Copyright © 2011-2022 走看看