下面是代码
import os
class ABC:
def test(self,name):
var = 5
var2 = 10
dic = {"Ada": "adada"}
print "asdfdsadv"
var1 = "Ada"
var2 = "asada"
obj = ABC()
print obj.test("Ada").var1
我正在寻找这样的东西。我可以在python中实现吗
我知道这是本地类的var变量。是否有通过全局或其他方式实现这一目标的方法
答案 0 :(得分:2)
我认为这可行。 init (自身)的行为类似于其他语言的构造函数。因此,实际上我正在一个类中构造一个类,以使您的最后一行正常工作。但是像其他建议一样,这不是应该使用Python的方式。
import os
class ABC(object):
def __init__(self):
pass
class test(object):
def __init__(self,name):
self.var = 5
self.var2 = 10
self.dic = {"Ada": "adada"}
print ("asdfdsadv")
self.var1 = "Ada"
self.var2 = "asada"
if __name__ == "__main__":
obj = ABC()
print (obj.test("Ada").var1)
答案 1 :(得分:1)
忘记类,一般考虑一下函数。
定义函数时,其范围内的任何变量都是 local ,并且只能从该函数的执行中进行访问。一旦执行完成,就是这样,它们消失了。这是根本;从函数获取数据的唯一方法是return
对其进行编辑。
尽管这是一种黑客行为,但您可以返回locals()
(局部变量字典),但这是可怕的做法。
import os
class ABC:
def test(self,name):
var = 5
var2 = 10
dic = {"Ada": "adada"}
print "asdfdsadv"
var1 = "Ada"
var2 = "asada"
return locals()
obj = ABC()
print obj.test("Ada")["var1"]
答案 2 :(得分:1)
无法从类方法访问变量,您必须在类级别设置变量,如下所示:
import os
class ABC:
def test(self,name):
var = 5
var2 = 10
dic = {"Ada": "adada"}
print "asdfdsadv"
self.var1 = "Ada"
var2 = "asada"
obj = ABC()
obj.test('Ada')
print obj.var1
通过将self返回到您的测试方法中,您可以在同一行中链接obj.test('Ada')。var1。
答案 3 :(得分:1)
您正在寻找的是class variable
,通常定义为self.variable
。这是您的代码示例:
import os
class ABC:
def __init__(self):
self.var = 5
self.var2 = 10
self.dic = {"Ada": "adada"}
self.var1 = "Ada"
def test(self,name):
print self.var
print self.var2
print self.var1 + " " + name
obj = ABC()
print obj.dic # {'Ada': 'adada'}
print obj.dic["Ada"] # adada
obj.test("wow") # 5, 10, Ada wow
obj.var1 = "Ede"
obj.test("wow") # 5, 10, Ede wow
但是根据其他答案的建议,您可能需要退后一步,检查python变量的scope是什么
答案 4 :(得分:1)
如果您从函数中返回对象本身,并且变量不是局部变量而是实例变量,则它起作用。
class ABC:
def test(self, name):
self.var1 = "My name is {}".format(name)
return self
obj = ABC()
print obj.test('Ada').var1