RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子467圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

1
# Python

Python 的 @property 是什么?怎么实现属性控制?

@property 把方法变成属性访问(只读),配合 setter/deleter 实现属性读写控制:@property def name(self); @name.setter def name(self, value)(校验逻辑);@name.deleter。好处:① 接口不变下改内部实现(把字段升级为计算/校验属性);② 只读属性(只定义 getter);③ 校验赋值(类型、范围);④ 惰性计算缓存。注意:property 是描述…

3
# Python

Python 的 super() 怎么用?为什么需要它?

super() 返回一个代理对象,按 MRO 顺序调用下一个类的方法,而非简单地调父类(避免硬编码类名、正确处理菱形继承)。用法:super().__init__(...) 在子类中调用后续类的初始化;super().method()。关键:super() 无参数时等价于 super(当前类, self)(3.0+),依赖 __class__ 单元格。多继承中 super 链式传递参数要协调(每个 __init__ 都用 super 且…

4
# Python

Python 的 MRO 是什么?多继承时方法解析顺序?

MRO(Method Resolution Order,方法解析顺序):确定多继承下方法查找顺序的算法,Python 3 用 C3 线性化(保证单调性、局部优先、合并父类 MRO)。查看:类名.__mro__ 或 mro()。原则:子类先于父类、左父类先于右父类、菱形继承中公共基类只出现一次且在其派生类之后。经典例子:class D(B, C) 且 B、C 都继承 A,mro = D → B → C → A → object。super…

5
# Python

Python 的 __init__ 和 __new__ 区别?单例模式怎么实现?

__new__(cls, ...) 是构造方法:负责创建并返回实例(在 __init__ 之前调用),是真正的类方法(参数 cls),通常返回 super().__new__(cls);__init__(self, ...) 是初始化方法:对已创建实例初始化属性,返回 None。单例实现:① 重写 __new__ 控制只创建一个实例:def __new__(cls): if not hasattr(cls, '_instance'):…

6
# Python

Python 的 self 和 cls 是什么?三种方法有什么区别?

self:实例方法第一个参数,绑定实例(调用时自动传入,无需手动传);cls:类方法第一个参数,绑定类本身。三种方法:① 实例方法 def f(self)——操作实例,可访问实例与类属性;② 类方法 @classmethod def f(cls)——操作类,可访问类属性、作替代构造函数(from_string);③ 静态方法 @staticmethod def f()——与类无关的工具函数(不需要 self/cls),类似模块级函数但归…

7
# Python

Python 面向对象三大特性如何体现?

封装:属性与方法绑定在对象上,用 _x/_x 约定私有(name mangling:__x 变为 _类名__x,不是真私有),通过属性/方法暴露接口;继承:class B(A),子类复用父类代码,支持多继承(注意 MRO),子类可重写父类方法;多态:同一接口不同实现——子类对象调用同名方法表现出不同行为(鸭子类型:不检查类型,只关心有没有该方法),配合 ABC 抽象类强制接口。

8
# Python

Python 函数默认参数的坑?为什么不能用可变对象做默认值?

默认参数在函数定义时求值一次,且对象被复用。若用可变对象(list/dict)作默认值,多次调用会共享同一对象:def f(a, lst=[]): lst.append(a); return lst——连续调用会累积数据(经典坑)。正确做法:默认值用 None,函数内 if lst is None: lst = []。同理默认参数绑定 lambda 等也会共享。这是面试高频题,考察对 Python 求值时机的理解。

9
# Python

Python 偏函数 partial 是什么?怎么用?

偏函数 = 固定原函数的部分参数生成新函数(类似柯里化,但只固定前缀/关键字参数)。用法:from functools import partial;p = partial(int, base=2),p('1010') == 10;partial(open, mode='r')。应用:① 简化高频调用(固定参数);② 回调传参(GUI/多进程 map 传固定参数);③ 配置化创建函数。实现原理:partial 对象保存 func + a…

10
# Python

Python functools 模块常用函数有哪些?

① wraps:装饰器保留原函数元信息;② lru_cache(maxsize):带缓存的结果记忆化(LRU 淘汰),加速重复计算(要求参数可哈希);③ partial:偏函数,固定部分参数生成新函数;④ reduce:累积归约(functools.reduce(lambda a,b: a+b, nums));⑤ cmp_to_key:把旧式比较函数转 key 函数;⑥ singledispatch:单分派泛型函数(按第一个参数类型分发…