跳转至

函数签名; 类与实例属性; 类与实例方法; 元组

2025.6.29

函数签名语法

中括号相关

collections 是 Python 官方提供的常见数据容器库,内含双端队列 deque 。相关文档可以看 Python 的官方网站。

以双端队列为例,这玩意是这样一个类:

Python
class collections.deque([iterable[, maxlen]])

这里的函数签名语法 [iterable[, maxlen]] 值得学习:

函数签名=参数个数+参数类型+返回值

一言以蔽之,中括号表示里面的参数可以不给。比如,以下都是合法的初始化:

Python
1
2
3
buffer = collections.deque()
buffer = collections.deque([1,2,3])
buffer = collections.deque([1,2,3],5)

[, maxlen] 表示第二个参数 maxlen 可以不给,但如果想按位置传参 maxlen ,必须先给定第一个参数 iterable

除非,如下按关键字传参

Python
buffer = collections.deque(maxlen = 5)

星号相关

Python 官方提供的 random 库里有这样一个函数

Python
random.sample(population, k, *, counts=None)

这里的 * 是用于分隔 位置参数关键字-only参数 的。

首先,这个函数一共有三个参数,分别是 population, kcounts ,其中, populationk 是位置参数,也就是说,它们既可以按位置传,也可以按关键字传;而 * 后的所有参数(此处是 counts )都是关键字参数,也就是说,它们只能按关键字传参。


类属性与实例属性

Python 里的类和 C++ 里的不一样,C++ 里的类只是一个类型,而 Python 里的类是一个独立的对象。

Python
1
2
3
4
5
6
7
class MyClass:
    # —— 这是一个类属性
    species = "Homo sapiens"

    def __init__(self, name):
        # —— 这是一个实例属性
        self.name = name

类属性直接在类的顶层作用域中定义,属于类本身;实例属性通常在类的 __init__ 函数(或其它实例函数)中以 self.xxx = ... 的形式定义,属于特定实例。

类属性保存在类的 __dict__ 中,而实例属性保存在实例的 __dict__ 中。

Python
1
2
3
4
5
>>> MyClass.__dict__['species']
'Homo sapiens'
>>> obj = MyClass("Alice")
>>> obj.__dict__['name']
'Alice'

类方法,实例方法与静态方法

如下所示:

Python
class MyClass:
    counter = 0

    def __init__(self, value):
        self.value = value
        MyClass.counter += 1

    def instance_method(self, increment):
        self.value += increment
        print(f"当前 value={self.value}")

    @classmethod
    def class_method(cls):
        print(f"当前已有 {cls.counter} 个实例")

    @staticmethod
    def add(a, b):
        print(f"{a} + {b} = {a+b}")

# 使用
obj = MyClass(10)
obj.instance_method(5)  # 输出:当前 value=15
ins = MyClass(11)
ins.class_method() # 输出:当前已有 2 个实例
ins.add(1,1) # 输出:1 + 1 = 2

实例方法默认第一个参数为 self ,代表调用该方法的实例对象。也就是说,obj.instance_method(5) 等价于 MyClass.instance_method(obj, 5)

类方法用 @classmethod 在定义处修饰,默认第一个参数为 cls ,代表调用该方法的类。

静态方法用 @staticmethod 在定义处修饰,用法和普通函数完全一致,不接受 selfcls 参数。


元组 tuple

元组 tuple 是 Python 内建的序列类型之一,用于存储有序不可变(immutable)的元素集合。