我们可以在python中使用点符号访问类方法变量吗

时间:2018-09-03 09:51:21

标签: python

下面是代码

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变量。是否有通过全局或其他方式实现这一目标的方法

5 个答案:

答案 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