繁体   English   中英

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

[英]Can we access class method variable using dot notation in 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 变量。 有没有办法通过使用全局或其他东西来实现这一点

从类方法访问变量是不可能的,您必须在类级别设置变量,如下所示:

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 链接到同一行中。

我认为这会奏效。 init (self) 的行为类似于其他语言中的构造函数。 所以实际上我正在一个类中构建一个类,以使您的最后一行正常工作。 但就像其他人建议的那样,这不是 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)

您正在寻找的是class variables ,通常定义为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 变量的范围是什么

忘记类并考虑一般的函数。

当您定义一个函数时,其范围内的任何变量都是本地的,并且只能从该函数的执行中访问。 一旦执行完成,就是这样,它们就消失了。 这是基本的; 从函数中获取数据的唯一方法是return它。


虽然它是一个 hack,你可以返回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"]

如果您从函数返回对象本身并且变量不是局部变量而是实例变量,则它可以工作。

class ABC:
    def test(self, name):
        self.var1 = "My name is {}".format(name)
        return self

obj = ABC()
print obj.test('Ada').var1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM