2021-04-15 第一阶段day11
day11
- 一、类的跨类调用
- 1、直接创建对象
- 2、构造函数创建对象
- 3、通过参数传递对象
- 二、类变量与类方法
- 三、Python语言所有变量的小结
- 四、私有成员
- 1、语法: 开头用两个下划线命名
- 2、作用:类外无法访问
- 3、原理:障眼法
- 五、属性
- 1、原理
- 2、过渡版本
- 3、最终版本
一、类的跨类调用
需求:用面向对象的方式描述“老张开车去东北”。
题目分析:老张与车彼此有行为,所以需要构建两个类。
构建类的原因:(1)需要承担行为(2)需要封装数据
共有三种跨类调用的方式:
1、直接创建对象
# 语义: 老张每次去东北都用一辆新车
class Person:def __init__(self, name=""):self.name = namedef go_to(self, position):print("去" + position)car = Car()car.run()class Car:def run(self):print("汽车在行驶")lz = Person("老张")
lz.go_to("东北")
2、构造函数创建对象
# 语义:老张每次开自己的车去东北
class Person:def __init__(self, name=""): # 创建对象时执行1次self.name = nameself.car = Car()def go_to(self, position):print("去" + position)self.car.run()class Car:def run(self):print("汽车在行驶")lz = Person("老张")
lz.go_to("东北")
3、通过参数传递对象
优势:不将Person和Car绑死,代码更灵活
# 语义:老张每次用交通工具去东北
class Person:def __init__(self, name=""):self.name = namedef go_to(self, vehicle, position):print("去" + position)vehicle.run()class Car:def run(self):print("汽车在行驶")lz = Person("老张")
bc = Car()
lz.go_to(bc, "东北")
二、类变量与类方法
类变量:在类内使用的变量,使用类名来访问。
对比实例变量:用实例来访问。
类方法:操作类变量的方法
class ICBC:total_money = 1000000 # 类变量@classmethod # 类方法def print_total_money(cls):# print("总行的钱",ICBC.total_money)# cls 存储的就是类地址,与类名相同,通常命名短于类名,所以建议使用print("总行的钱", cls.total_money)def __init__(self, name="", money=0):# 实例变量:对象不同的数据self.name = name# 支行的钱self.money = money# 总行的钱减少ICBC.total_money -= self.moneytt = ICBC("天坛支行", 100000)
ICBC.print_total_money()
xd = ICBC("西单支行", 200000)
ICBC.print_total_money()
三、Python语言所有变量的小结
# 全局变量:整个文件可用
a = 10def func01():# 局部变量:一个函数内部可用b = 20class Myclass:# 类变量:使用类名访问d = 40def __init__(self):# 实例变量:使用对象访问self.c = 30m01 = Myclass()
print(m01.c)
print(Myclass.d)
四、私有成员
1、语法: 开头用两个下划线命名
class MyClass:def __init__(self):# 私有实例变量self.__data = 10def __func01(self):print("func01")def func02(self):print(self.__data)self.__func01()m01 = MyClass()
# print(m01.__data)
# m01.__func01()
m01.func02()
print(m01.__dict__) # {'_MyClass__data': 10}
2、作用:类外无法访问
3、原理:障眼法
表面:__data
实际:_MyClass__data
五、属性
1、原理
作用:保护实例变量取值在有效范围内
步骤:
(1)私有化实例变量
(2)提供公开的读取方法
(3)提供公开的写入方法
定义:
@property
def 属性名(self):
return self.__属性名
@属性名.setter
def 属性名(self,value):
self.__属性名= value
2、过渡版本
# 过渡版本
class Wife:def __init__(self, name="", age=0):self.name = name# self.__age = ageself.set_age(age)def get_age(self):return self.__agedef set_age(self, value):if value < 0:value = 0elif value > 120:value = 120self.__age = value# 年龄:0~120
ak = Wife("阿珂", 999)
print(ak.name)
print(ak.get_age())
3、最终版本
class Wife:def __init__(self, name="", age=0):self.name = nameself.age = age # 本身是实例变量 现在变为属性了@property # age = property(age) 读def age(self):return self.__age@age.setter # age = age.setter(age) 改def age(self, value):if value < 0:value = 0elif value > 120:value = 120self.__age = value# 年龄:0~120
ak = Wife("阿珂", 999)
ak.age = 8889print(ak.age)
2021-04-15 第一阶段day11相关推荐
- 社招面经: 联易融Java开发一面2021.04.15
项目介绍 项目使用的架构技术体系SpringCloud.Spring.SpringMVC.Springboot.Mybatis.Mybatis-plus(该公司招聘需求上有就介绍了).Nacos.Re ...
- python学习基础第一阶段day11
python 属性全部语法 核心逻辑:拦截目标:保护数据 1. 读 + 写属性 快捷键:props + 回车 class Wife: def init(self, age=0): self.age = ...
- (四十四:2021.04.15)《Methodology Camp》——Chapter 2:Pieces
<Methodology Camp :Pieces> 讲在前面 **问题一**:工作时别人给我手机发消息,要不停看手机,我想在pc上操作我的手机,怎么办? **问题二**:作为一个编程领域 ...
- 苹果手机应用分身_【第一阶段B1】:苹果手机应用和疑问15例大纲、链接、汇总!...
大家好,第一阶段关于苹果手机生活应用和疑问15例已经更新完毕(当然,未来还会有第二阶段的更新).为了方便大家点击,我将更15例大纲和链接全部排列出来,方便大家查阅! 以下是第一阶段苹果手机15例链接汇 ...
- 2021年认证杯SPSSPRO杯数学建模A题(第一阶段)医学图像的配准全过程文档及程序
2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现: 图像的配准是图像处理领域中的一个典型问题和技术难点,其目的在于比较或融合同一对象在不同条件下获取的图像.例如为了更好地综 ...
- kotlin笔记第一阶段(变量语句函数)
kotlin笔记第一阶段(变量&语句&函数) 笔记所在视频地址 02.Kotlin语言成为Android第一语言 03.Kotlin语言和JVM虚拟机 04.学Kotlin语言的重要性 ...
- Java学习总结第一阶段
day1(甘特图)预科阶段 甘特图:让工程项目变成可视化图表,也叫项目进度规划表. 一般由:任务名称.工期.开始时间.完成时间.前置任务.资源名称.日期组成 如下所示,资源名称那就是人的名字,前置任务 ...
- 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...
- 荣耀机试题 2021.04 ~05
记录下最近面试的算法题 题目记得不是特别清楚了,大致描述. 一 2021.04.17荣耀机试 1 数组排序 题目描述:输入多个数字,按数字从小到大排序. 输入描述 多个整数,保证都在int范围内,用空 ...
最新文章
- R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts))
- tensorflow从入门到精通100讲(三)-谈谈Estimator在Tensorflow中的应用
- 【Paper】研究论文不会写?先来学学怎么做西红柿炒鹌鹑蛋吧!
- VTK:可视化算法之CutWithScalars
- Java经典面试题整理及答案详解(三)
- 两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍
- jQuery-动画与特效
- wifi卡慢延迟高_120平套三没网线,吃鸡延迟只有20ms,网件Orbi RBK50路由真香
- IIS经典模式与集成模式
- c语言布线编程问题,布线问题c语言实现代码.doc
- uniapp同目录的相对地址_如何修改手机MAC地址?
- 数据结构课程设计【银行储蓄系统】
- 安装arcgis的时候应用程序无法正常启动0xc000007b解决方法
- 因为一条SQL,我差点被祭天......,我太难了!
- 第三章 迭代器(iterators)概念与traits编程技法
- python 法律检索_Python爬虫进阶必备 | 某裁判文书检索网站加密分析与自动登录实现...
- 中国大学生三天连夜做的AI特效小游戏,一天暴涨800万用户!
- 求复杂多边形面积的算法
- python如何输出数字穿插大小写:a1B2c3D4e5F6g7H8i9J10
- 毕业了,说几句真心话+献上自导自演的毕业照吧