You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中MemoryClass类__init__与__call__参数的类型关联疑问

Python参数命名与内置名称的疑问解答

疑问1:将__init__的参数命名为function的情况

Python里的参数名只是普通标识符,和内置名称同名时,只会在当前方法的作用域内覆盖原有的内置名称,但不会强制限制传入参数的类型。

换句话说,名为function的参数可以接收任意类型的对象——整数、字符串、函数、自定义类实例等等都可以,Python不会自动把它关联成函数类型。

举个实际代码例子:

class MemoryClass:
    def __init__(self, function):
        self.function = function

# 传入整数
obj1 = MemoryClass(123)
# 传入字符串
obj2 = MemoryClass("test")
# 传入函数对象
def demo_func():
    pass
obj3 = MemoryClass(demo_func)

以上代码完全可以正常运行,没有任何类型强制限制。

疑问2:将__call__的参数命名为list的情况

逻辑和上面完全一致:list作为参数名只是一个标识符,即便它和Python内置的列表类型同名,也不会强制要求传入的参数必须是list类型,你可以传入任意对象。

代码示例:

class MemoryClass:
    def __call__(self, list):
        print(f"传入对象的类型:{type(list)}")

obj = MemoryClass()
obj(789)          # 输出:传入对象的类型:<class 'int'>
obj({"name": "jumi"})  # 输出:传入对象的类型:<class 'dict'>
obj([1,2,3])      # 输出:传入对象的类型:<class 'list'>

额外提醒

虽然Python允许用内置名称作为参数名,但不推荐这么做——因为这会在当前方法作用域内覆盖原有的内置对象,导致你无法直接使用原内置功能。比如在上面的__call__方法里,你再想创建一个新列表,就不能直接写list()了,得改用__builtins__.list(),反而增加了代码复杂度。

内容的提问来源于stack exchange,提问作者jumi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:26:04