我在文件api.py
中有一个类,它包含属性:
class API(object):
api_key = ''
def add_advert(self):
print(self.api_key)
在另一个类中,我使用上面的import类:
import api
api = api.API()
然后在类中,我尝试将值写入属性api_key
:
api.api_key = 'NEW VALUE'
所以,当我从api
类调用另一个方法时:
api.add_advert()
它不会为api_key
返回新值:
def add_advert(self):
print(self.api_key)
我的最终代码是:
import controller.api
apiClass = controller.api.API()
当我试图设置:
apiClass.api_key = 'NEW VALUE'
它给了我:
'NoneType' object has no attribute 'api_key'
首先,不要让变量名成为文件的导入名的阴影。将
api
变量更改为api_var
等其他变量。然后,使用api_var.api_key
,或者如果导入API类,API.api_key
。您需要引用实例或类来获取类/静态变量。Python无法神奇地知道您所指的名称空间是什么。你知道吗似乎有点混乱。实际上,如果您运行:
听起来像是你想要的。那只是打字错误吗?还是问题中少了一点?你知道吗
更广泛的问题。不,没有这样的静态类属性(或变量)。。。但是可变对象的行为给了你一种从其他语言中知道的行为(当人们无意中发现它时,偶尔会把它弄糊涂)。使用:
您可以尝试:
实际上,它们都指向同一个对象(list的实例)。你知道吗
但是,如果直接指定给属性(而不是操纵该对象),则“魔力”消失了:
这是切向的,但更有趣的功能。如果使用可变类型作为默认值,则在定义(未调用)函数时会将其指定给变量,并且每次调用时都会返回到该默认值,它仍然是一个对象:
然后:
老实说。你最好避免。。。因为它真的会让人困惑和惊讶,尤其是当别人开始编写你的代码时。它实质上打破了对象的封装,改变的影响超出了显而易见的范围。过梁也会将其标记为问题。;)
相关问题 更多 >
编程相关推荐