面向对象
- 以双下划线开头的属性(如
__item)被视为私有属性,但仍可以通过名称改写后的方式访问到。 - 类属性与类本身绑定,所有实例共享;实例属性通过
self绑定,每个实例独立。
class People:
# 类属性:与类关联。若为不可变类型(如字符串),实例修改时不会影响其他实例;
# 若为可变类型(如 list),则会被所有实例共享,需特别注意。
People_name = "People"
def __init__(self, name):
self.name = name # 实例属性,与实例关联

可以通过 type() 查看对象所属的类型:
print(type(People))
__init__ 构造方法

继承

子类会继承父类的属性和方法:

方法重写

几个关键点:
- 子类对象调用方法时,优先在子类中查找。
- 如果子类没有定义
__init__,默认会调用父类的__init__。通常的做法是:子类定义自己的__init__,在其中显式调用父类的__init__,再补充子类特有的属性。 - 多继承时,如果多个父类都定义了同名方法(如
speak),而子类没有定义,会按照SonClass.__mro__给出的顺序去查找。MRO(Method Resolution Order)的规则是:优先当前类,然后按照类定义时声明的父类顺序依次查找。
多态
isinstance(obj, Class) # 判断对象是否属于某个类型
静态方法与类方法

内置方法(魔法方法)


装饰器
装饰器本质上是一种类似 AOP(切面编程)的机制:在不修改原函数的前提下,为其增加额外的行为。


调用 fun(hi) 实际返回的是一个闭包 inner 函数,该闭包持有变量 hi 的引用:

未使用语法糖的写法:
def hi():
print("hi")
def fun(i_fun):
def inner():
print("before")
i_fun()
print("after")
return inner
hi = fun(hi)
hi()
使用 @ 语法糖的等价写法:
def fun(i_fun):
def inner():
print("before")
i_fun()
print("after")
return inner
@fun
def hi():
print("hi")
hi()
装饰带参数和返回值的函数:





异常处理
所有异常类的基类是 BaseException。



