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

Python类self使用错误:调用实例方法引发NameError与TypeError

Python中self的正确使用及常见问题修复

先给你修正后的完整可运行代码:

class Environment:
    def __init__(self):
        # 修正拼写错误:topographyRegistery -> topographyRegistry
        self.topographyRegistry = []

    def addTopographyToEnvironment(self, topography):
        # 通过self访问实例属性
        self.topographyRegistry.append(topography)

    # 给方法添加self参数,使其成为合法的实例方法
    def displayEnvironment(self):
        print(f"Registered topographies: {self.topographyRegistry}")

    def getRegisteredEnvironment(self):
        # 通过self访问实例属性,同时确保拼写一致
        return self.topographyRegistry

# 正确流程:先实例化类
env = Environment()
# 通过实例调用方法,无需手动传入self
env.addTopographyToEnvironment("mountain")
env.addTopographyToEnvironment("river")

env.displayEnvironment()
print(env.getRegisteredEnvironment())

核心问题拆解与self的正确用法

1. 实例方法必须通过类的实例调用

你直接用Environment.addTopographyToEnvironment()调用方法是错误的——实例方法的设计目标是服务于类的具体实例,而非类本身。正确步骤是先创建实例(env = Environment()),再通过实例调用方法,此时Python会自动把当前实例作为self参数传入方法,不需要你手动传递。

如果硬要通过类名调用实例方法,你得手动传入实例(比如Environment.addTopographyToEnvironment(env, "mountain")),但这完全是冗余操作,开发中绝不会这么用。

2. self是实例方法的必填首参数

所有操作实例属性的方法(实例方法),必须把self作为第一个参数声明。比如你之前的displayEnvironment没加self,当用实例调用时,Python自动传入的实例找不到对应的参数位置,就会报参数不匹配的错误。

self的本质是当前调用方法的实例本身,通过它你可以访问实例的属性(比如self.topographyRegistry)、调用其他实例方法(比如在某个方法里写self.displayEnvironment())。

3. 修复属性拼写错误

你代码里的topographyRegistery是拼写错误,正确写法是topographyRegistry(结尾为ry)。不管是初始化属性还是在方法中访问,都要保持拼写一致,否则会出现属性找不到的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:10:30