day27 面向对象
day27 面向对象
一、面相对象介绍
1 什么是对象
面相对象是一种编程思想,而对象的核心就是把程序‘整合’
定义:对象是一种‘容器’,用来盛放数据(变量)与功能(函数)
2 类于对象
定义:类也是一种容器,用来存放同类别对象共有的数据与功能
例子:人类,人的对象
人类有共有的数据(居住:地球)共有的功能(能走,能吃)这是所有人类共有的,当一个新的人类对象出现时,他就具备以上的数据和功能。而这个人类对象也可以有一些独有的属性(名字:黄钊),一些他独有的功能(能写代码),这就是类和对象的关系。
我们把以上逻辑转换成编程思想
类,类的实例化对象
类是同一类对象的共有数据与方法的集合,在实例化一个新的对象时,它会同时具有这个该类中的公有数据(例:x=10)和函数(例:def run():)。我们也可以让这个实例化的对象丰富起来,给他添加他特有的数据和函数。
二、实现面向对象编程
1 先定义类
注意1:类是对象相似功能的集合体,所以类体中可以存放任意代码
注意2:类在定义时就会执行类体代码
注意3:类是为了存放对象的相似集合,并不是用于直接使用的
# 类的命名规范:通常以驼峰体
class Student:
# 1、变量的定义
stu_school='oldboy'
# 2、功能的定义
def tell_stu_info(stu_obj):
print('学生信息:名字:%s 年龄:%s 性别:%s' %(
stu_obj['stu_name'],
stu_obj['stu_age'],
stu_obj['stu_gender']
))
def set_info(stu_obj,x,y,z):
stu_obj['stu_name']=x
stu_obj['stu_age']=y
stu_obj['stu_gender']=z
2 属性访问
类中的数据与功能统称为类的熟悉,我们有以下两种方式去访问我们类中的熟悉
2.1 调用dict方法
# 先查看类的内置方法__dict__内存放的是什么
print(Student.__dict__)
{'__module__': '__main__', 'stu_school': 'oldboy', 'tell_stu_info':
<function Student.tell_stu_info at 0x000002ABCBEC1E18>, 'set_info':
<function Student.set_info at 0x000002ABCBEC1EA0>,
'__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
# 可以看到类的dict方法得到的是一个类的字典,其中有一部分是变量名和函数名和他们对应的内存地址
#所以我们可以通过字典取key的方法去查找类的属性
print(Student.__dict__['stu_school'])
>>>oldboy
print(Studeng.__dict__['tell_stu_info'])
>>><function Student.tell_stu_info at 0x000001FF7E511E18>
2.2 类.属性
上面的方法通常情况不会使用,有一种更简单的方法
print(Student.stu_school)
>>>oldboy
print(Student.set_info)
>>><function Student.tell_stu_info at 0x000001FF7E511E18>
3 调用类产生对象
stu1_obj=Student()
print(stu1_obj.set_info)
>>><bound method Student.set_info of <__main__.Student object at 0x0000022D4D3374E0>>
'''
这里我们通过调用对象在类中的共有方法可以发现,在此处他不再是一个函数而是一个绑定方法
准确的来说,在新建一个对象时,他会具备类的中所有属性,但是这个具备是有区别的
类的名称空间类似于全局名称空间
对象的名称空间类似函数的局部名称空间
我们可以在局部找全局,但是不能在局部修改全局,可以在全局修改局部
'''
stu2_obj=Student()
stu3_obj=Student()
4 对象的自定义属性
在实例化一个对象后,我们可以给对象添加新的属性,如果这些新的属性都有同样的属性名,我们可以把他放在类中去定义
class Student:
# 1、变量的定义
stu_school='oldboy'
# 对象的私有属性
def __init__(self, x, y, z):
self.name = x # 空对象.stu_name='egon'
self.age = y # 空对象.stu_age=18
self.gender = z # 空对象.stu_gender='male'
# 2、功能的定义
def tell_stu_info(self):
print('学生信息:名字:%s 年龄:%s 性别:%s' %(
self.name,
self.age,
self.gender
))
def set_info(self,x,y,z):
self.name=x
self.age=y
self.gender=z
这时候调用类产生对象会发生三件事
- 产生一个空对象
- python会自动调用类中的--init--方法,然后将空对象已经调用的类时括号的参数一同传入
- 返回执行完类中init方法的对象
stu1_obj=Student('egon',18,'male')
总结--init--方法
- 会在调用类的时候自动触发执行,用来为对象初始化自己独有的数据
- --init--内应该存放对象初始化属性的功能,但是可以存放任意其他代码,想要在类调用时就理科执行的代码都可以放在这个方法内
- --init--方法必须返回None
5 类的函数和对象的绑定方法
我们要调用类中定义的函数必须遵循该函数的使用规范
stu1_obj = Student('hz',18,'male')
Student.tell_stu_info(stu1_obj)#该函数需要传入一个参数
>>>学生信息:名字:hz 年龄:18 性别:male
对象的绑定方法:对象在创建的时候,类中的函数会把这个函数绑定给对象。
使用:使用方法和函数没有区别,唯一的区别是,我绑定的这个实例化对象会作为这个函数的第一个参数传入
stu1_obj = Student('hz',18,'male')
stu1_obj.tell_stu_info()
>>>学生信息:名字:hz 年龄:18 性别:male
扩展:python中万物皆对象
#例子:
l1 = [1,2,3,4]
#l1是list类的实例化对象,我们可以在l1上使用list所有的内置函数,即l1的绑定方法
day27 面向对象的更多相关文章
- day27——面向对象的总结、异常处理
day27 面向对象的总结 异常处理 错误的分类 语法错误 if if 2>1 print(222) dic = {"name"; "alex"} 逻辑错 ...
- day27 Pyhton 面向对象02 组合
# 组合 # 什么是组合 : 一个类对象的属性是另外一个类的对象 class Person: def __init__(self,name,sex,hp,mp,ad): self.name = nam ...
- day27 Pyhton 面向对象02 类和对象的命名空间
一.内容回顾 类:具有相同属性和方法的一类事务 # 描述一类事务轮廓的一个机制 #商品/用户/店铺 对象/实例: 对象(实例)就是类的实例化 # 对象就是类的一个具体的表现 #某一件特定的商品/某个人 ...
- Python之面向对象四
面向对象进阶 一.关于面向对象的两个内置函数 isinstance 判断类与对象的关系 isinstance(obj,cls)检查obj是否是类 cls 的对象,返回值是bool值 issu ...
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 一起学 Java(二)面向对象
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
随机推荐
- HDU - 3591 The trouble of Xiaoqian 题解
题目大意 有 \(N\) 种不同面值的硬币,分别给出每种硬币的面值 \(v_i\) 和数量 \(c_i\).同时,售货员每种硬币数量都是无限的,用来找零. 要买价格为 \(T\) 的商品,求在交易中最 ...
- .Net Core WebAPI + Axios +Vue 实现下载与下载进度条
故事的开始 老板说:系统很慢,下载半个小时无法下载,是否考虑先压缩再给用户下载? 本来是已经压缩过了,不过第一反应应该是用户下的数量多,导致压缩包很大,然后自己测试发现,只是等待的时间比较久而已,仍然 ...
- EIGRP-16-其他和高级的EIGRP特性-2-非等价负载分担
与大多数内部路由协议不同的是, EIGRP能够将流量负载分到多条非等价路径上,而不仅仅使用去往目的地最近距离的那一条路径.提供这项功能的特性称为非等价负载分担. 非等价负载分担的核心概念是可行后继 ...
- <VCC笔记> 关于Assertion
这篇博客开始介绍VCC的用法,先用简单的例子介绍VCC的基本语法,当然面对更复杂的程序时,VCC也是将他简化然后分析的. 1.Assertion #include <vcc.h> int ...
- FTP 常用命令
1. 准备 1.1 ftp 信息: ftp 服务器地址:192.168.168.10 用户名:will 密码:123 1.2 ftp 工具 使用 Windows 命令行: “开始” 按钮-> 搜 ...
- (一)POI-新建excel文件
原文:https://blog.csdn.net/class157/article/details/92799521 package com.java.poi; import org.apache.p ...
- MySQL ORDER BY:对查询结果进行排序
在 MySQL SELECT 语句中,ORDER BY 子句主要用来将结果集中的数据按照一定的顺序进行排序. 其语法格式为: ORDER BY {<列名> | <表达式> | ...
- 多线程高并发编程(11) -- 非阻塞队列ConcurrentLinkedQueue源码分析
一.背景 要实现对队列的安全访问,有两种方式:阻塞算法和非阻塞算法.阻塞算法的实现是使用一把锁(出队和入队同一把锁ArrayBlockingQueue)和两把锁(出队和入队各一把锁LinkedBloc ...
- [问题解决]coding时修改代码键入前边后边的自动删除
问题原因:误按下键盘上的Insert键 解决办法:再按一下即可
- 基于flask的城市空气质量分析系统
1.1 系统功能 在对主要需求进行分析后,确定系统由以下几个模块组成. 1) 用户信息管理: 该部分主要完成系统管理员的增加.删除.编辑和访问控制权限等操作. 2) 数据管理: 该部分主要完成后台存 ...