python 21 面向对象
1. 面向对象初步认识
面向过程编程VS函数编程:减少重复代码,增强了可读性
面向对象编程VS函数编程优点:
①对相似功能的函数,同一个业务的函数进行归类、分类;
类:具有相同属性和功能的一类事物
对象:类的具体体现(具体到一个事物),对象间是不同的。
②要站在上帝的角度构建代码,类就是一个公共的模板,对象就是从模板实例化出来的,得到对象就是得到了一切。
2. 面向对象的结构
class 类名: # 类名用驼峰法,首字母大写,不可用下划线
属性、方法
obj = 类名() # 实例化对象
# example
class Human:
mind = "有思想" # 类的属性(静态属性、静态字段)
language = "语言"
def work(self): # 动态方法
print("都会工作")
def eat(self):
print("都能吃饭")
3. 从类名的角度研究类
3.1 类名操作类中的属性
3.1.1 类名查看类中所有的内容
print(Human.__dict__) # 方法会显示地址
3.1.2 类名操作类中的静态属性 万能的点
# 增
Human.body = "有头" # 类名.变量名="值"
# 删
def Human.mind
# 改
Human.mind = "学习" # 类名.变量名="改的值"
# 查
print(Human.language)
3.2 类名调用类中的方法
一般类中的方法不会通过类名调用。
Human.work("参数") # 必须传参,不用,没有意义
# 总结
一般类名就是操作类中的属性。
4. 从对象的角度研究类
4.1 类名()
类名():实例化过程,会得到一个返回值。返回值就是对象、实例。
实例化一个对象发生了三件事:
1. 开辟一个对象空间;(和类空间不同)
2. 自动执行__init__方法,并且将对象空间的地址传给self,属于隐形传参;(此时对象空间有两个名称:self、obj)
3. 运行__init__方法内的代码,给对象空间封装属性(与类空间无关,Human.__dict__无法显示对象中封装的属性。)
通过传参可以向对象内封装属性、传值。
class Human:
mind = "有思想"
language = "语言"
def __init__(self):
self.name = name
self.age = age
def work(self):
print("能够工作")
def eat(self):
print("可以吃饭")
obj = Human()
4.2 对象操作对象空间的属性
4.2.1 对象查看对象的空间所有的属性
print(obj.__dict__) # 以字典的形式
4.2.2 对象操作对象空间的属性 (外部操作)
class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print("能够工作")
def eat(self):
print("可以吃饭")
obj = Human("meet",30)
# 增
obj.sex = "男"
# 删
del obj.name
# 改
obj.age = 18
# 查
print(obj.age)
4.2.3 对象查看类中的属性
只能查看,不能修改类中的属性,否则只会增添到对象中的属性。对于可变数据类型,如列表,对象或类名都可以给列表内的元素进行增删改(地址不变)。
print(obj.mind)
4.2.4 对象调用类中的方法
class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print(f"{self.name}今年{self.age}岁,能够工作")
def eat(self):
print(f"{self.name}今年{self.age}岁,可以吃饭")
obj = Human("meet",30)
obj.work()
obj.eat()
self:本身来说就是类中的方法的第一个参数,会自动接收对象的内存地址。
5. 一个类可以实例化多个对象
class Human:
mind = "有思想"
language = "语言"
def __init__(self,name,age):
self.name = name
self.age = age
def work(self):
print(f"{self.name}今年{self.age}岁,能够工作")
def eat(self):
print(f"{self.name}今年{self.age}岁,可以吃饭")
obj = Human("meet",30)
obj.work()
obj.eat()
obj1 = Human("alex",18)
obj1.work()
obj1.eat()
obj2 = Human("dsb0",20)
obj2.work()
obj2.eat()
python 21 面向对象的更多相关文章
- Python的面向对象1
今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++ ,Java ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...
- 10 . Python之面向对象
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象初识别 面向过程v ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python的面向对象3
接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...
- Python的面向对象2
我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...
- My way to Python - Day05 - 面向对象-思维导图
My way to Python - Day05 - 面向对象 思维导图
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- Python之面向对象一
引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
随机推荐
- LiteDB源码解析系列(3)索引原理详解
在这一章,我们将了解LiteDB里面几个基本数据结构包括索引结构和数据块结构,我也会试着说明前辈数据之巅在博客中遇到的问题,最后对比mysql进一步深入了解LiteDB的索引原理. 1.LiteDB的 ...
- ubuntu16.04服务器上无root权限,配置个人tensorflow环境--cuda9.0+cuDNN7+tensorflow-gpu-1.8
本人在服务器上已经用Anconda创建好python3.5的环境,这个网上有一大堆教程.接下来是重点. 1. cuda的安装 https://developer.nvidia.com/cuda-dow ...
- 如何简单易懂地描述REST接口编程
网上很多关于REST的介绍,看起来都是云里雾里的,就像在看论文一样,晦涩难懂, 这里有一个链接大概可以简单明了地描述:https://www.zhihu.com/question/28557115
- 优化 Ubuntu
优化Ubuntu 1. 更换 apt 源 echo 'deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe mul ...
- Linux EXT2 文件系统
磁盘是用来储文件的,但是必须先把磁盘格式化为某种格式的文件系统,才能存储文件.文件系统的目的就是组织和管理磁盘中的文件.在 Linux 系统中,最长见的是 ext2 系列的文件系统.其早期版本为 ex ...
- nginx 之负载均衡 :PHP session 跨多台服务器配置
公司一个项目单点压力越来越大,考虑到稳定性和降压,使用nginx做负载均衡,将请求分发到多个docker上去,这里记录下PHP多服务器间的会话session共享问题,解决方案是把session单独存在 ...
- Code blocks返回错误代码:Process returned -1073741819 (0xC0000005)
循环语句访问链表时,返回了错误代码: 逐项排查后,发现是由while循环引起的: 附上出错代码: do{ L=L->post; printf("%05d %d %05d\n" ...
- go 学习之路(二)
一.文件名 关键字 标识符 所有go源码都以.go结尾 标识符以字母或下划线开头,大小写敏感 a.boy b.Boy c.a+b d.0boy e._boy f.=_boy g._ 以上变量c.d.f ...
- mysql中left join right join inner join用法分析
mysql数据库中的关联查询,基本都会用到left join,right join,inner join等查询方式,今天来说说这三种用法的区别 1.创建表test1,test2,插入测试数据 #创建表 ...
- Linux基础进程管理优先级
一.进程优先级 Linux进程调度及多任务 每个cpu(或者cpu核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的cpu及核心数量.Li ...