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相关推荐

  1. 社招面经: 联易融Java开发一面2021.04.15

    项目介绍 项目使用的架构技术体系SpringCloud.Spring.SpringMVC.Springboot.Mybatis.Mybatis-plus(该公司招聘需求上有就介绍了).Nacos.Re ...

  2. python学习基础第一阶段day11

    python 属性全部语法 核心逻辑:拦截目标:保护数据 1. 读 + 写属性 快捷键:props + 回车 class Wife: def init(self, age=0): self.age = ...

  3. (四十四:2021.04.15)《Methodology Camp》——Chapter 2:Pieces

    <Methodology Camp :Pieces> 讲在前面 **问题一**:工作时别人给我手机发消息,要不停看手机,我想在pc上操作我的手机,怎么办? **问题二**:作为一个编程领域 ...

  4. 苹果手机应用分身_【第一阶段B1】:苹果手机应用和疑问15例大纲、链接、汇总!...

    大家好,第一阶段关于苹果手机生活应用和疑问15例已经更新完毕(当然,未来还会有第二阶段的更新).为了方便大家点击,我将更15例大纲和链接全部排列出来,方便大家查阅! 以下是第一阶段苹果手机15例链接汇 ...

  5. 2021年认证杯SPSSPRO杯数学建模A题(第一阶段)医学图像的配准全过程文档及程序

    2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现:   图像的配准是图像处理领域中的一个典型问题和技术难点,其目的在于比较或融合同一对象在不同条件下获取的图像.例如为了更好地综 ...

  6. kotlin笔记第一阶段(变量语句函数)

    kotlin笔记第一阶段(变量&语句&函数) 笔记所在视频地址 02.Kotlin语言成为Android第一语言 03.Kotlin语言和JVM虚拟机 04.学Kotlin语言的重要性 ...

  7. Java学习总结第一阶段

    day1(甘特图)预科阶段 甘特图:让工程项目变成可视化图表,也叫项目进度规划表. 一般由:任务名称.工期.开始时间.完成时间.前置任务.资源名称.日期组成 如下所示,资源名称那就是人的名字,前置任务 ...

  8. 2021年 第12届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2021.04.18】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[题目下载.2013年(第4届)~2020年(第11届)] CSDN 蓝桥杯 专栏 2013年 第04届 蓝桥杯 Java B组 省赛真题详解及小结 ...

  9. 荣耀机试题 2021.04 ~05

    记录下最近面试的算法题 题目记得不是特别清楚了,大致描述. 一 2021.04.17荣耀机试 1 数组排序 题目描述:输入多个数字,按数字从小到大排序. 输入描述 多个整数,保证都在int范围内,用空 ...

最新文章

  1. R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts))
  2. tensorflow从入门到精通100讲(三)-谈谈Estimator在Tensorflow中的应用
  3. 【Paper】研究论文不会写?先来学学怎么做西红柿炒鹌鹑蛋吧!
  4. VTK:可视化算法之CutWithScalars
  5. Java经典面试题整理及答案详解(三)
  6. 两步路轨迹文件位置_最新Uber ATG的轨迹预测方法LiRaNet介绍
  7. jQuery-动画与特效
  8. wifi卡慢延迟高_120平套三没网线,吃鸡延迟只有20ms,网件Orbi RBK50路由真香
  9. IIS经典模式与集成模式
  10. c语言布线编程问题,布线问题c语言实现代码.doc
  11. uniapp同目录的相对地址_如何修改手机MAC地址?
  12. 数据结构课程设计【银行储蓄系统】
  13. 安装arcgis的时候应用程序无法正常启动0xc000007b解决方法
  14. 因为一条SQL,我差点被祭天......,我太难了!
  15. 第三章 迭代器(iterators)概念与traits编程技法
  16. python 法律检索_Python爬虫进阶必备 | 某裁判文书检索网站加密分析与自动登录实现...
  17. 中国大学生三天连夜做的AI特效小游戏,一天暴涨800万用户!
  18. 求复杂多边形面积的算法
  19. python如何输出数字穿插大小写:a1B2c3D4e5F6g7H8i9J10
  20. 毕业了,说几句真心话+献上自导自演的毕业照吧

热门文章

  1. 基础--双方常微分方程演化博弈与matlab——matlab2016a版本
  2. Web ApI(JS进阶)
  3. nyoj740“炫舞家“ST【dp】
  4. Mastodon 长毛象多租户:自定义域名、自定义账号别名
  5. 消灭搜索框的多媒体搜索,路在何方?
  6. 网页自动识别跳转手机或pc
  7. screen安装与命令详解
  8. Leaflet加载百度瓦片到WGS84坐标系下
  9. 2022-2028年全球啤酒保鲜机行业收入年复合增长率CAGR为 3.9%
  10. 编写一个AQI分析的Orange插件