摘要: ###面向对象三大特征介绍 Python 是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。 ###封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只对外暴露“相关调用方法”。通过前面学习的“私有属性、私有方法”的方式,实现“封装”。P 阅读全文
posted @ 2022-11-19 16:58 竹蜻蜓vYv 阅读(27) 评论(0) 推荐(0) 编辑
摘要: ###@property 装饰器 @property 可以将一个方法的调用方式变成“属性调用”。下面是一个简单的示例,让大家体会一下这种转变: # 简单测试@property class Employee: @property def salary(self): return 30000 emp1 阅读全文
posted @ 2022-11-19 16:49 竹蜻蜓vYv 阅读(39) 评论(0) 推荐(0) 编辑
摘要: ###私有方法的调用 # 测试私有属性、私有方法 class Employee: def __init__(self, name, age): self.name = name self.__age = age # 私有实例属性 def __work(self): print("好好学习,天天向上" 阅读全文
posted @ 2022-11-19 16:41 竹蜻蜓vYv 阅读(19) 评论(0) 推荐(0) 编辑
摘要: Python 对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:1. 通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。2. 类内部可以访问私有属性(方法)3. 类外部不能直接访问私有属性(方法)4. 类外部 阅读全文
posted @ 2022-11-19 16:31 竹蜻蜓vYv 阅读(120) 评论(0) 推荐(0) 编辑
摘要: ###方法没有重载 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含 3个部分:方法名、参数数量、参数类型。Python 中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,Python 中是没有方法的重载的。定义一个方法即可有多种 阅读全文
posted @ 2022-11-19 16:18 竹蜻蜓vYv 阅读(23) 评论(0) 推荐(0) 编辑
摘要: ###__call__方法和可调用对象 定义了__call__方法的对象,称为“可调用对象”,即该对象可以像函数一样被调用。 # 测试__call__,可调用对象 class SalaryAccount: '''工资计算类''' def __call__(self, salary): yearSal 阅读全文
posted @ 2022-11-19 16:08 竹蜻蜓vYv 阅读(25) 评论(0) 推荐(0) 编辑
摘要: ###__del__方法(析构函数)和垃圾回收机制 __del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。 Python 实现自动的垃圾回收,当对象没有被引用时(引用计数为 0),由垃圾回收器调用__del__方法。 我们也可 阅读全文
posted @ 2022-11-19 16:03 竹蜻蜓vYv 阅读(28) 评论(0) 推荐(0) 编辑
摘要: ###类方法 类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod 来定义,格式如下: @classmethod def 类方法名(cls [,形参列表]) : 函数体要点如下:1. @classmethod 必须位于方法上面一行2. 第一个 cls 必须有;cls 指的就是“类 阅读全文
posted @ 2022-11-19 15:25 竹蜻蜓vYv 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 类属性是从属于“类对象”的属性,也称为“类变量”。由于,类属性从属于类对象,可以被所有实例对象共享。 类属性的定义方式: class 类名: 类变量名= 初始值 在类中或者类的外面,我们可以通过:“类名.类变量名”来读写。 【操作】 类属性的使用测试 class Student: company = 阅读全文
posted @ 2022-11-19 15:17 竹蜻蜓vYv 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 我们在前面讲的类定义格式中,“class 类名:”。实际上,当解释器执行 class 语句时,就会创建一个类对象。 【操作】测试类对象的生成 class Student: pass # 空语句 print(type(Student)) print(id(Student)) Stu2 = Studen 阅读全文
posted @ 2022-11-19 15:14 竹蜻蜓vYv 阅读(34) 评论(0) 推荐(0) 编辑
摘要: ###实例方法 实例方法是从属于实例对象的方法。实例方法的定义格式如下:def 方法名(self [, 形参列表]): 函数体方法的调用格式如下:对象.方法名([实参列表]) ###要点: 1. 定义实例方法时,第一个参数必须为 self。和前面一样,self 指当前的实例对象。2. 调用实例方法时 阅读全文
posted @ 2022-11-19 15:07 竹蜻蜓vYv 阅读(19) 评论(0) 推荐(0) 编辑
摘要: ###实例属性和实例方法 ###实例属性 实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用有如下几个要点:1. 实例属性一般在__init__()方法中通过如下代码定义: self.实例属性名 = 初始值2. 在本类的其他实例方法中,也是通过 self 进行访问: self.实例属性名3 阅读全文
posted @ 2022-11-19 15:01 竹蜻蜓vYv 阅读(14) 评论(0) 推荐(0) 编辑
摘要: ###__init__构造方法和__new__方法 类是抽象的,也称之为“对象的模板”。我们需要通过类这个模板,创建类的实例对象,然后才能使用类定义的功能。我们前面说过一个 Python 对象包含三个部分:id(identity 识别码)、type(对象类型)、value(对象的值)。现在,我们可以 阅读全文
posted @ 2022-11-19 14:58 竹蜻蜓vYv 阅读(34) 评论(0) 推荐(0) 编辑
摘要: ###类的定义 我们把对象比作一个“饼干”,类就是制造这个饼干的“模具”。 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打包在一起”。 对象是类的具体实体,一般称为“类的实例”。类看做“饼干模具”,对象就是根据这个“模具”制造出的“饼干”。 从一个类创建对象时,每个 阅读全文
posted @ 2022-11-19 14:54 竹蜻蜓vYv 阅读(110) 评论(0) 推荐(0) 编辑
摘要: ###对象的进化 随着编程面临的问题越来越复杂,编程语言本身也在进化,从主要处理简单数据开始,随着数据变多进化“数组”; 数据类型变复杂,进化出了“结构体”; 处理数据的方式和逻辑变复杂,进化出了“对象”。 1. 简单数据 像 30,40,50.4 等这些数字,可以看做是简单数据。最初的计算机编程, 阅读全文
posted @ 2022-11-19 14:48 竹蜻蜓vYv 阅读(26) 评论(0) 推荐(0) 编辑
摘要: ###第 6 章(1) 面向对象初步 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭积木一样简单。面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更 阅读全文
posted @ 2022-11-19 14:44 竹蜻蜓vYv 阅读(37) 评论(0) 推荐(0) 编辑
摘要: ###LEGB 规则 Python 在查找“名称”时,是按照 LEGB 规则查找的: Local-->Enclosed-->Global-->Built inLocal 指的就是函数或者类的方法内部Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)Global 指的是模块中的全局变量B 阅读全文
posted @ 2022-11-19 14:35 竹蜻蜓vYv 阅读(26) 评论(0) 推荐(0) 编辑
摘要: ###nonlocal 关键字 nonlocal 用来声明外层的局部变量。global 用来声明全局变量。 【操作】使用 nonlocal 声明外层局部变量 # 测试 nonlocal、global 关键字的用法 a = 100 def outer(): b = 10 def inner(): no 阅读全文
posted @ 2022-11-19 14:31 竹蜻蜓vYv 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ###嵌套函数(内部函数) 嵌套函数:在函数内部定义的函数! def f1(): print('f1 running...') def f2(): print('f2 running...') f2() f1() 输出结果: f1 running... f2 running... 上面程序中,f2( 阅读全文
posted @ 2022-11-19 14:24 竹蜻蜓vYv 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 【操作】 使用递归函数计算阶乘(factorial) def factorial(n): if n == 1: return 1 return n * factorial(n - 1) for i in range(1, 6): print(i, '!=', factorial(i)) 输出结果: 阅读全文
posted @ 2022-11-19 14:16 竹蜻蜓vYv 阅读(29) 评论(0) 推荐(0) 编辑