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

为何无法从类外部访问__init__中定义的类变量?

问题分析与解决

嘿,我一眼就看出你代码里的问题啦!核心是你没有创建类的实例,而是直接把类本身赋值给了变量,这才导致后续操作都不符合预期。

先看你写的测试代码:

>>> class test:
...     def __init__(self):
...         self.testy=0
...     def __str__(self):
...         return self.testy
>>> a=test
>>> b=test
>>> print(a)
<class '__main__.test'>
>>> a.testy
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    a.testy
AttributeError: type object 'test' has no attribute 'testy'

问题拆解

  1. 混淆了类和实例的概念
    a=test 这行代码是把test这个类对象赋值给了变量a,而不是创建一个test类的实例。要创建实例,必须加括号调用类:a=test()——这才是告诉Python“根据test这个蓝图造一个具体的对象出来”。

  2. 实例变量的访问范围
    self.testy是实例变量,它属于每个类的实例,而不是类本身。所以只有当你创建了实例后,这个变量才会存在;直接访问类的testy属性,自然会报“没有这个属性”的错误。

  3. __str__方法的返回值要求
    还有个小细节:__str__方法必须返回字符串类型,你现在直接返回整数self.testy,等你创建实例后打印它,会抛出TypeError。得改成return str(self.testy)把整数转成字符串。

修正后的代码

>>> class Test:  # 按照Python规范,类名建议用大驼峰命名法
...     def __init__(self):
...         self.testy = 0
...     def __str__(self):
...         return str(self.testy)  # 转成字符串返回,符合__str__的要求
>>> a = Test()  # 创建类的实例,加括号!
>>> print(a)
0
>>> a.testy
0

这样操作下来,你就能正常访问实例变量,并且打印实例时得到预期的结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:57:38