zoukankan      html  css  js  c++  java
  • 4 类与对象

    面向对象学习目录

    1 面向对象介绍

    2 类、实例、属性、方法详解

    3 面向过程与面向对象进一步比较

    4 类与对象

    5 属性查找与绑定方法

    6 小结

    7 继承与派生

    8 组合

    9 抽象类

    10 多态

    11 封装

    12 绑定方法与非绑定方法

    13 内置方法(上)

    14 内置方法(中)之描述符

    15 内置方法(下)

    16 元类


    类与对象的概念

      类即类别、种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体。
      那么问题来了,先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看
    • 在现实世界中:肯定是先有对象,再有类
      世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,比如人类、动物类、植物类等概念。也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在,比如你无法告诉我人类具体指的是哪一个人。
    • 在程序中:务必保证先定义类,后产生对象
      这与函数的使用是类似的:先定义函数,后调用函数,类也是一样的:在程序中需要先定义类,后调用类。不一样的是:调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象

    定义类

      按照上述步骤,我们来定义一个类(我们站在老男孩学校的角度去看,在座的各位都是学生)
    • 在现实世界中,先有对象,再有类
    对象1:李坦克
    特征:
    学校=oldboy
    姓名=李坦克
    性别=男
    年龄=18
    技能:
    学习
    吃饭
    睡觉
     
    对象2:王大炮
    特征:
    学校=oldboy
    姓名=王大炮
    性别=女
    年龄=38
    技能:
    学习
    吃饭
    睡觉
     
    对象3:牛榴弹
    特征:
    学校=oldboy
    姓名=牛榴弹
    性别=男
    年龄=78
    技能:
    学习
    吃饭
    睡觉
     
    现实中的老男孩学生类
    相似的特征:
    学校=oldboy
    相似的技能:
    学习
    吃饭
    睡觉
     
    • 在程序中,务必保证:先定义(类),后使用类(用来产生对象)
      #在Python中程序中的类用class关键字定义,而在程序中特征用变量标识,技能用函数标识,因而类中最常见的无非是:变量和函数的定义
     1 class OldboyStudent:
     2   school='oldboy'
     3   def learn(self):
     4     print('is learning')
     5  
     6   def eat(self):
     7     print('is eating')
     8  
     9   def sleep(self):
    10     print('is sleeping')
    注意:
    • 类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过OldboyStudent.__dict__查看
    • 类中定义的名字,都是类的属性,点是访问属性的语法。
    • 对于经典类来说我们可以通过该字典操作类名称空间的名字,但新式类有限制(新式类与经典类的区别我们将在后续章节介绍)

    类的使用

    • 引用类的属性
    1 OldboyStudent.school #
    2 OldboyStudent.school='Oldboy' #
    3 OldboyStudent.x=1 #
    4 del OldboyStudent.x #
    • 调用类,或称为实例化,得到程序中的对象
    1 s1=OldboyStudent()
    2 s2=OldboyStudent()
    3 s3=OldboyStudent()
      #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
    • __init__方法
      #注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值
     1 class OldboyStudent:
     2   ......
     3   def __init__(self,name,age,sex):
     4     self.name=name
     5     self.age=age
     6     self.sex=sex
     7   ......
     8  
     9 s1=OldboyStudent('李坦克','',18) #先调用类产生空对象s1,然后调用OldboyStudent.__init__(s1,'李坦克','男',18)
    10 s2=OldboyStudent('王大炮','',38)
    11 s3=OldboyStudent('牛榴弹','',78)

    对象的使用

    1 #执行__init__,s1.name='牛榴弹',很明显也会产生对象的名称空间可以用s2.__dict__查看,查看结果为{'name': '王大炮', 'age': '女', 'sex': 38}
    2  
    3 s2.name #查,等同于s2.__dict__['name']
    4 s2.name='王三炮' #改,等同于s2.__dict__['name']='王三炮'
    5 s2.course='python' #增,等同于s2.__dict__['course']='python'
    6 del s2.course #删,等同于s2.__dict__.pop('course')

    补充说明

    • 站的角度不同,定义出的类是截然不同的;
    • 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等;
    • 有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类。
  • 相关阅读:
    C++数据类型与C#对应关系 c#调用WINDWOS API时,非常有用(转)
    Web应用系统中关闭Excel进程
    jquery下一个空格带来的血案
    导出Excel时发生COM组件失败的解决方案
    水晶报表的交叉表中增加超级链接
    JavaScript和ExtJS的继承 Ext.extend Ext.applyIf (转)
    SQL SERVER 2000数据库置疑处理
    PHP中对淘宝URL中ID提取
    树莓派+蓝牙适配器连接蓝牙设备
    树莓派摄像头模块转成H264编码通过RTMP实现Html输出
  • 原文地址:https://www.cnblogs.com/oceanicstar/p/8846931.html
Copyright © 2011-2022 走看看