摘要:
###面向对象三大特征介绍 Python 是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。 ###封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法。相当于将“细节封装起来”,只对外暴露“相关调用方法”。通过前面学习的“私有属性、私有方法”的方式,实现“封装”。P 阅读全文
posted @ 2022-11-19 16:58
竹蜻蜓vYv
阅读(68)
评论(0)
推荐(0)
摘要:
###@property 装饰器 @property 可以将一个方法的调用方式变成“属性调用”。下面是一个简单的示例,让大家体会一下这种转变: # 简单测试@property class Employee: @property def salary(self): return 30000 emp1 阅读全文
posted @ 2022-11-19 16:49
竹蜻蜓vYv
阅读(67)
评论(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
阅读(44)
评论(0)
推荐(0)
摘要:
Python 对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别。关于私有属性和私有方法,有如下要点:1. 通常我们约定,两个下划线开头的属性是私有的(private)。其他为公共的(public)。2. 类内部可以访问私有属性(方法)3. 类外部不能直接访问私有属性(方法)4. 类外部 阅读全文
posted @ 2022-11-19 16:31
竹蜻蜓vYv
阅读(153)
评论(0)
推荐(0)
摘要:
###方法没有重载 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含 3个部分:方法名、参数数量、参数类型。Python 中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,Python 中是没有方法的重载的。定义一个方法即可有多种 阅读全文
posted @ 2022-11-19 16:18
竹蜻蜓vYv
阅读(46)
评论(0)
推荐(0)
摘要:
###__call__方法和可调用对象 定义了__call__方法的对象,称为“可调用对象”,即该对象可以像函数一样被调用。 # 测试__call__,可调用对象 class SalaryAccount: '''工资计算类''' def __call__(self, salary): yearSal 阅读全文
posted @ 2022-11-19 16:08
竹蜻蜓vYv
阅读(35)
评论(0)
推荐(0)
摘要:
###__del__方法(析构函数)和垃圾回收机制 __del__方法称为“析构方法”,用于实现对象被销毁时所需的操作。比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。 Python 实现自动的垃圾回收,当对象没有被引用时(引用计数为 0),由垃圾回收器调用__del__方法。 我们也可 阅读全文
posted @ 2022-11-19 16:03
竹蜻蜓vYv
阅读(59)
评论(0)
推荐(0)
摘要:
###类方法 类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod 来定义,格式如下: @classmethod def 类方法名(cls [,形参列表]) : 函数体要点如下:1. @classmethod 必须位于方法上面一行2. 第一个 cls 必须有;cls 指的就是“类 阅读全文
posted @ 2022-11-19 15:25
竹蜻蜓vYv
阅读(84)
评论(0)
推荐(0)
摘要:
类属性是从属于“类对象”的属性,也称为“类变量”。由于,类属性从属于类对象,可以被所有实例对象共享。 类属性的定义方式: class 类名: 类变量名= 初始值 在类中或者类的外面,我们可以通过:“类名.类变量名”来读写。 【操作】 类属性的使用测试 class Student: company = 阅读全文
posted @ 2022-11-19 15:17
竹蜻蜓vYv
阅读(29)
评论(0)
推荐(0)
摘要:
我们在前面讲的类定义格式中,“class 类名:”。实际上,当解释器执行 class 语句时,就会创建一个类对象。 【操作】测试类对象的生成 class Student: pass # 空语句 print(type(Student)) print(id(Student)) Stu2 = Studen 阅读全文
posted @ 2022-11-19 15:14
竹蜻蜓vYv
阅读(48)
评论(0)
推荐(0)
摘要:
###实例方法 实例方法是从属于实例对象的方法。实例方法的定义格式如下:def 方法名(self [, 形参列表]): 函数体方法的调用格式如下:对象.方法名([实参列表]) ###要点: 1. 定义实例方法时,第一个参数必须为 self。和前面一样,self 指当前的实例对象。2. 调用实例方法时 阅读全文
posted @ 2022-11-19 15:07
竹蜻蜓vYv
阅读(41)
评论(0)
推荐(0)
摘要:
###实例属性和实例方法 ###实例属性 实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用有如下几个要点:1. 实例属性一般在__init__()方法中通过如下代码定义: self.实例属性名 = 初始值2. 在本类的其他实例方法中,也是通过 self 进行访问: self.实例属性名3 阅读全文
posted @ 2022-11-19 15:01
竹蜻蜓vYv
阅读(36)
评论(0)
推荐(0)
摘要:
###__init__构造方法和__new__方法 类是抽象的,也称之为“对象的模板”。我们需要通过类这个模板,创建类的实例对象,然后才能使用类定义的功能。我们前面说过一个 Python 对象包含三个部分:id(identity 识别码)、type(对象类型)、value(对象的值)。现在,我们可以 阅读全文
posted @ 2022-11-19 14:58
竹蜻蜓vYv
阅读(69)
评论(0)
推荐(0)
摘要:
###类的定义 我们把对象比作一个“饼干”,类就是制造这个饼干的“模具”。 我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打包在一起”。 对象是类的具体实体,一般称为“类的实例”。类看做“饼干模具”,对象就是根据这个“模具”制造出的“饼干”。 从一个类创建对象时,每个 阅读全文
posted @ 2022-11-19 14:54
竹蜻蜓vYv
阅读(261)
评论(0)
推荐(0)
摘要:
###对象的进化 随着编程面临的问题越来越复杂,编程语言本身也在进化,从主要处理简单数据开始,随着数据变多进化“数组”; 数据类型变复杂,进化出了“结构体”; 处理数据的方式和逻辑变复杂,进化出了“对象”。 1. 简单数据 像 30,40,50.4 等这些数字,可以看做是简单数据。最初的计算机编程, 阅读全文
posted @ 2022-11-19 14:48
竹蜻蜓vYv
阅读(42)
评论(0)
推荐(0)
摘要:
###第 6 章(1) 面向对象初步 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型软件设计而来的。面向对象编程使程序的扩展性更强、可读性更好,使的编程可以像搭积木一样简单。面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更 阅读全文
posted @ 2022-11-19 14:44
竹蜻蜓vYv
阅读(60)
评论(0)
推荐(0)
摘要:
###LEGB 规则 Python 在查找“名称”时,是按照 LEGB 规则查找的: Local-->Enclosed-->Global-->Built inLocal 指的就是函数或者类的方法内部Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)Global 指的是模块中的全局变量B 阅读全文
posted @ 2022-11-19 14:35
竹蜻蜓vYv
阅读(46)
评论(0)
推荐(0)
摘要:
###nonlocal 关键字 nonlocal 用来声明外层的局部变量。global 用来声明全局变量。 【操作】使用 nonlocal 声明外层局部变量 # 测试 nonlocal、global 关键字的用法 a = 100 def outer(): b = 10 def inner(): no 阅读全文
posted @ 2022-11-19 14:31
竹蜻蜓vYv
阅读(28)
评论(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
阅读(69)
评论(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
阅读(84)
评论(0)
推荐(0)
摘要:
###递归函数 递归函数指的是:自己调用自己的函数,在函数体内部直接或间接的自己调用自己。递归类似于大家中学数学学习过的“数学归纳法”。 每个递归函数必须包含两个部分:1. 终止条件表示递归什么时候结束。一般用于返回值,不再调用自己。2. 递归步骤把第 n 步的值和第 n-1 步相关联。 递归函数由 阅读全文
posted @ 2022-11-19 14:13
竹蜻蜓vYv
阅读(53)
评论(0)
推荐(0)
摘要:
###eval()函数 功能:将字符串 str 当成有效的表达式来求值并返回计算结果。 语法: eval(source[, globals[, locals]]) -> value 参数:source:一个 Python 表达式或函数 compile()返回的代码对象globals:可选。必须是 d 阅读全文
posted @ 2022-11-19 14:09
竹蜻蜓vYv
阅读(91)
评论(0)
推荐(0)
摘要:
###lambda 表达式和匿名函数 lambda 表达式可以用来声明匿名函数。lambda 函数是一种简单的、在同一行中定义函数的方法。lambda 函数实际生成了一个函数对象。lambda 表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。lambda 表达式的基 阅读全文
posted @ 2022-11-19 14:07
竹蜻蜓vYv
阅读(39)
评论(0)
推荐(0)
摘要:
###可变参数 可变参数指的是“可变数量的参数”。分两种情况:1. *param(一个星号),将多个参数收集到一个“元组”对象中。2. **param(两个星号),将多个参数收集到一个“字典”对象中。 【操作】测试可变参数处理(元组、字典两种方式) def f1(a, b, *c): print(a 阅读全文
posted @ 2022-11-19 14:00
竹蜻蜓vYv
阅读(58)
评论(0)
推荐(0)
摘要:
###参数的几种类型 ###位置参数 函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为:“位置参数”。 【操作】测试位置参数 def f1(a, b, c): print(a, b, c) f1(2, 3, 4) f1(2, 3) # 报错,位置参数不匹配 输出结果: 阅读全文
posted @ 2022-11-19 13:58
竹蜻蜓vYv
阅读(122)
评论(0)
推荐(0)
摘要:
###传递不可变对象包含的子对象是可变的情况 # 传递不可变对象时。不可变对象里面包含的子对象是可变的。则方法内修改了这个可变对象,源对象也发生了变化。 a = (10, 20, [5, 6]) print("a:", id(a)) def test01(m): print("m:", id(m)) 阅读全文
posted @ 2022-11-19 13:46
竹蜻蜓vYv
阅读(50)
评论(0)
推荐(0)
摘要:
###浅拷贝和深拷贝 为了更深入的了解参数传递的底层原理,我们需要讲解一下“浅拷贝和深拷贝”。我们可以使用内置函数:copy(浅拷贝)、deepcopy(深拷贝)。 浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象 # 测试浅拷贝 阅读全文
posted @ 2022-11-19 13:41
竹蜻蜓vYv
阅读(39)
评论(0)
推荐(0)
摘要:
###传递不可变对象的引用 传递参数是不可变对象(例如:int、float、字符串、元组、布尔值),实际传递的还是对象的引用。在”赋值操作”时,由于不可变对象无法修改,系统会新创建一个对象。 【操作】参数传递:传递不可变对象的引用 a = 100 def f1(n): print("n:", id( 阅读全文
posted @ 2022-11-19 13:36
竹蜻蜓vYv
阅读(78)
评论(0)
推荐(0)
摘要:
###参数的传递 函数的参数传递本质上就是:从实参到形参的赋值操作。 Python 中“一切皆对象”,所有的赋值操作都是“引用的赋值”。所以,Python 中参数的传递都是“引用传递”,不是“值传递”。具体操作时分为两类:1. 对“可变对象”进行“写操作”,直接作用于原对象本身。2. 对“不可变对象 阅读全文
posted @ 2022-11-19 13:32
竹蜻蜓vYv
阅读(45)
评论(0)
推荐(0)
摘要:
###局部变量和全局变量效率测试 局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。 【操作】测试局部变量和全局变量效率 # 测试局部变量、全局变量的效率 import math impor 阅读全文
posted @ 2022-11-19 13:21
竹蜻蜓vYv
阅读(91)
评论(0)
推荐(0)
摘要:
###变量的作用域(全局变量和局部变量) 变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。变量分为:全局变量、局部变量。 全局变量:1. 在函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束。2. 全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使 阅读全文
posted @ 2022-11-19 13:17
竹蜻蜓vYv
阅读(293)
评论(0)
推荐(0)
摘要:
###函数也是对象,内存底层分析 Python 中,“一切都是对象”。实际上,执行 def 定义函数后,系统就创建了相应的函数对象。我们执行如下程序,然后进行解释: def print_star(): print("*********") print(print_star()) print(" ") 阅读全文
posted @ 2022-11-19 13:04
竹蜻蜓vYv
阅读(63)
评论(0)
推荐(0)
摘要:
###返回值 return 返回值要点:1. 如果函数体中包含 return 语句,则结束函数执行并返回值;2. 如果函数体中不包含 return 语句,则返回 None 值。3. 要返回多个返回值,使用列表、元组、字典、集合将多个值“存起来”即可。 【操作】定义一个打印 n 个星号的无返回值的函数 阅读全文
posted @ 2022-11-19 12:51
竹蜻蜓vYv
阅读(135)
评论(0)
推荐(0)
摘要:
###形参和实参 形参和实参的要点,请参考上一节中的总结。在此不再赘述 【操作】定义一个函数,实现两个数的比较,并返回较大的值。 def printMax(a, b): """实现两个数的比较,并返回较大的值""" if a > b: print(a, '较大值') else: print(b, ' 阅读全文
posted @ 2022-11-19 12:46
竹蜻蜓vYv
阅读(83)
评论(0)
推荐(0)
摘要:
###函数简介 ###函数的基本概念 1. 一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。2. 函数是代码复用的通用机制。 ###Python 函数的分类 Python 中函数分为如下几类:1. 内置函数我们前面使用的 str()、list()、len()等这些都是内置函数,我们可以拿 阅读全文
posted @ 2022-11-19 12:23
竹蜻蜓vYv
阅读(299)
评论(0)
推荐(0)

浙公网安备 33010602011771号