Day 8:16 个类型函数和 10 个类对象相关的内置函数盘点
c++中面向对象的编程思想在python中可以很好的类比。
下面将介绍Python中类型创建、管理自定义类的相关内置函数。
函数作用域问题
在写程序的时候,我们会定义各种变量、全局变量、局部变量等,Python中查找变量的顺序遵循LEGB规则,即当遇到每个变量时,python解释器:
- 优先从它所属的函数(Local)内查找;
- 若找不到,并且它位于一个内嵌函数中,就再到它的父函数(Enclosing)中查找;
- 如果还是找不到,再去全局作用域(Global)查找;
- 再找不到,最后去内置作用域(Build-in)查找。
- 若还是找不到,报错。
min 函数属于 Python 中内置函数,所以在搜寻完 LEG 三个区域后,最终在 build-in 域被找到。
如果在四个域中都未找到某个变量,一般就会抛出 NameError: name '****变量**' is not defined。
类型函数
bool([x])
测试一个对象是 True,还是 False。
bytes([source[, encoding[, errors]]])
将一个字符串转换成字节类型:
str(object='')
将字符类型、数值类型等转换为字符串类型:
chr(i)
查看十进制整数对应的 ASCII 字符:
ord(c)
查看某个 ASCII 字符对应的十进制数:
dict()
用来创建字典:
class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg)
object()
返回一个根对象,它是所有类的基类。
值得一提的是,查看obj对象上的方法有什么,__dir_() 函数:
int(x)
int(x, base =10)
,x 可能为字符串或数值,将 x 转换为一个整数
如果x不是一个数字,或者给定了base,那么x必须是一个字符串、字节或字节数组实例,代表一个radix base的整数文字。可以选择在文字前面加上+或-(中间没有空格),并且用空格包围。一个基数为n的文字由数字0到n-1组成,a到z(或A到Z)的值为10到35。默认的基数是10。允许的值是0和2-36。基数为2、-8和-16的字元可以选择用0b/0B、0o/0O或0x/0X作为前缀,就像代码中的整数字元一样。基数0的意思是完全按照代码文字解释,所以实际的基数是2、8、10或16,所以int('010',0)不合法,而int('010')合法,以及int('010',8)合法。
float(x)
将一个字符串或整数转换为浮点数:
frozenset([iterable])
创建一个不可修改的冻结集合,一旦创建不允许增删元素。
普通的集合能够通过 add(i) 和 pop() 函数来增加一个元素和移除集合中的第一个元素.
list([iterable])
返回可变序列类型:列表.listlistlist , 作用就是把可迭代类型(Iterable)转化为列表。
使用 map 函数,转化列表内每一个整形元素为字符串型。同时,m 是可迭代类型,经过 list 转化后,得到列表 l1:
range(stop);range(start, stop[,step])
Python 提供两个内置的 range 函数,生成不可变序列:
set([iterable])
返回一个集合对象,并允许创建后再增加、删除元素。容器里不允许有重复元素
slice(stop);slice(start, stop[, step])
返回一个由 range(start, stop, step)
所指定索引集的 slice 对象:
tuple([iterable])
创建一个不可修改的元组对象:
type(object);type(name, bases, dict)
显然,这是查看对象的类型的函数。
zip(*iterables)
创建一个迭代器,聚合每个可迭代对象的元素,参数前带 *
,意味着是可变序列参数,可传入 1 个,2 个或多个参数。
类对象及属性
classmethod
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数。
第一个参数需要是表示自身类的 cls 参数,能调用类的属性、方法、实例等。
delattr(object, name)
删除对象的属性,在不需要某个或某些属性时,这个方法就会很有用。
dir([object])
不带参数时,返回当前范围内的变量、方法和定义的类型列表;
带参数时返回参数的属性、方法列表。
dir()
dir(xiaoming)
hasattr(object, name)
检查对象上是否有查询的name方法or属性
isinstance(object, classinfo)
判断 object 是否为类 classinfo 的实例,若是,返回 true。
序列类型的基类为 Iterable(可迭代类型),所以返回 True:
issubclass(class, classinfo)
如果 class 是 classinfo 类的子类,返回 True:
classinfo 取值也可能为元组,若 class 是元组内某个元素类型的子类,也会返回 True:
property(fget=None, fset=None, fdel=None, doc=None)
这样对类属性得定义,就是绕过了初始化这一层,还有一种方法,使用
Python 装饰器 @property,同样能实现对类上属性的定义 ,并且更简洁:
super([type[, object-or-type]])
返回一个代理对象,它会将方法调用委托给 type 的父类或兄弟类。
如下,子类的 add 方法,一部分直接调用父类 add,再有一部分个性的行为:打印结果。
callable(object)
判断对象是否可被调用,能被调用的对象就是一个 callable 对象,比如函数 str、int 等都是可被调用的
上面的例子可以看到,这样定义的实例不可以被调用,实例要怎么像函数一样被调用呢?
有方法!重写 Student 类上 __call__ 方法:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~