报错AttributeError:类lyssna无属性s,如何跨类访问类属性s并拆分?
解决AttributeError:访问类内部变量的问题
嘿,这个错误其实很好理解——你现在的代码里,s是被定义在lyssna类的du方法内部的局部变量,它只在du方法执行时存在,不属于lyssna类本身,所以外部代码(比如Fixish里)直接用lyssna.s肯定找不到它呀!
给你几个可行的解决思路:
方法1:把s改成类属性
这是最简单的方式,直接把s定义在类的层级下,而不是方法内部:
class lyssna: s = '5-22' # 这里直接把s设为类属性,整个类都能访问 def du(): # 保留你原来的方法逻辑即可 pass class Fixish(): strt, stpp = lyssna.s.split('-') # 现在就能正常访问拆分了
方法2:如果s必须在du方法中生成
如果s的内容是需要通过du方法的逻辑生成的,那可以把它绑定到类或者实例上:
子方法2.1:用实例属性
如果du是实例方法(建议给方法加self参数):
class lyssna: def du(self): self.s = '5-22' # 把s设为实例属性 class Fixish(): # 先创建lyssna的实例,调用du方法生成s lys_instance = lyssna() lys_instance.du() strt, stpp = lys_instance.s.split('-')
子方法2.2:用类方法绑定类属性
如果不需要实例化,想直接操作类本身,可以用@classmethod:
class lyssna: @classmethod def du(cls): cls.s = '5-22' # 给类本身设置属性 # 先调用类方法生成s,再定义Fixish lyssna.du() class Fixish(): strt, stpp = lyssna.s.split('-')
注意哦:如果是在Fixish类定义时就执行拆分操作,一定要确保lyssna.s已经被正确定义好了,不然还是会出现找不到属性的错误~
内容的提问来源于stack exchange,提问作者aleckzz
相关产品推荐
相关产品推荐

