博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象:类与对象
阅读量:5113 次
发布时间:2019-06-13

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

类与对象的概念

类即类别、种类,是面向对象设计的最重要的概念

种类:是特征与技能的结合体

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

 

  • 在现实世界中:是先有对象,再有类
世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,比如人类、动物类、植物类等概念。也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在,比如你无法告诉我人类具体指的是哪一个人。
  • 在程序中:先定义类,后产生对象

这与汗水的使用时类似的:先定义函数,后调用函数,类也是一样的:在程序中需要先定义类,后调用类。

不一样的是:调用函数会执行函数体代码返回的函数执行的结果,而调用类会产生对象,返回的是对象

定义类

按照上述步骤,我来定义一个类

  • 在现实世界中,先有对象,再有类
对象1:李坦克    特征:        学校=oldboy        姓名=李坦克        性别=男        年龄=18    技能:        学习        吃饭        睡觉对象2:王大炮    特征:        学校=oldboy        姓名=王大炮        性别=女        年龄=38    技能:        学习        吃饭        睡觉对象3:牛弹琴    特征:        学校=oldboy        姓名=牛弹琴        性别=男        年龄=78    技能:        学习        吃饭        睡觉现实中的学生类    相似的特征:        学校=oldboy    相似的技能:        学习        吃饭        睡觉
  •   在程序中,务必保证:先定义(类),后使用类(用来产生对象)
class OldboyStudent:    school = 'oldboy'    def learn(self):        print('is learning')        def eat(self):        print('is eating')            def sleep(self):        print('is sleeping')

  注意:

  •     类中可以有任意python代码,这些代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名与函数名,可以通过oldboystudent__dict__查看
  • 类中定义的名字,都是类的属性,点事访问属性的语法
  • 对于经典类来说我们可以通过该字典操作类名称空间的名字,但新式类有限制

类的使用

  • 引用类的属性
# 查s1 = OldboyStudent.schoolprint(s1)# 修改s2 = OldboyStudent.school = '北京大学'print(s2)# 增加s3 = OldboyStudent.x = 223print(s3)# 删除del OldboyStudent.x
  •   调用类,或称为实例化,得到程序中的对象
s1=OldboyStudent()s2=OldboyStudent()s3=OldboyStudent()

  

#如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
  • __init__ 方法

 

class OldboyStudent:    school = 'oldboy'    def learn(self):        print('is learning')    def eat(self):        print('is eating')    def sleep(self):        print('is sleeping')    def __init__(self, name, age, sex):        self.name = name        self.age = age        self.sex = sex # 加上__init__方法后,实例化的步骤 # 1、先调用类产生空对象s1, # 2、再调用OldboyStudent.__init__('李坦克', '男', 18)s1 = OldboyStudent('李坦克', '男', 18) s2 = OldboyStudent('王大炮', '男', 38) s3 = OldboyStudent('牛弹琴', '女', 22)

  

 

  

 

  对象使用

# 执行__init__,s1.name = '李坦克',很明显也会产生对象的名称空间可以用s1.__dict__查看,查看结果为:

{'name': '李坦克', 'age': '男', 'sex': 18}s1.name  # 查,等同于s1.__dict__['name']= '李坦克's1.name = '李坦克'  # 改,等同于s1.__dict__['name']='李坦克's1.course = 'python'  # 增,等同于s2.__dict__['course']='python'del s1.course # 删除,等同于s1.__dict__.pop('course)

  补充说明

  • 站的角度不同,定义出的类是截然不同的;
  • 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等
  • 有时为了编程需求, 程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类

 

#加上__init__方法后,实例化的步骤 # 1、先产生一个空对象stu1 # 2、LuffyStudent.__init__(stu1,'王二丫','女',18)

转载于:https://www.cnblogs.com/mike-liu/p/9127533.html

你可能感兴趣的文章
dd命令 建立两颗一模一样的磁盘
查看>>
常用的jquery触屏手机页面特效代码下载
查看>>
background-clip,background-origin
查看>>
C# 如何创建一个Windows服务
查看>>
集群和分布式区别
查看>>
Android(java)学习笔记153:采用post请求提交数据到服务器(qq登录案例)
查看>>
Java基础知识强化101:Java 中的 String对象真的不可变吗 ?
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>
虚拟主机与虚拟目录学习小结
查看>>
hlg1414安装雷达【贪心】
查看>>
Blog文章待看
查看>>
Golang flag包使用详解(一)
查看>>
python文件IO
查看>>
regsvr32简介
查看>>
升级到 .NET Core 2.1
查看>>
C#多线程交替赋值取值
查看>>
对Java前四章的感受
查看>>
【Linux】ping命令详解
查看>>
对团队成员公开感谢博客
查看>>
密码学总结
查看>>