为何无法从类外部访问__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'
问题拆解
混淆了类和实例的概念
a=test这行代码是把test这个类对象赋值给了变量a,而不是创建一个test类的实例。要创建实例,必须加括号调用类:a=test()——这才是告诉Python“根据test这个蓝图造一个具体的对象出来”。实例变量的访问范围
self.testy是实例变量,它属于每个类的实例,而不是类本身。所以只有当你创建了实例后,这个变量才会存在;直接访问类的testy属性,自然会报“没有这个属性”的错误。__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
相关产品推荐
相关产品推荐

