Python从属性移到他的类

时间:2019-10-06 18:57:11

标签: python function class attributes

假设我有以下代码:

class abc():

    def __init__(self):
        self.a = 0


def somefunc(var):
    pass


if __name__ == "__main__":
    aaa = abc()
    somefunc(aaa.a)

现在我的问题是,如果我只有属性,有一种方法可以通过传递给“ somefunc”的属性(a)获取类(aaa)的实例?换句话说,要从属性转到他的班级。

我知道这样做并不受欢迎,但是我有些情况迫使我这么做。

谢谢您的帮助!!!!

3 个答案:

答案 0 :(得分:3)

答案是否定的。

假设我有以下代码:

class abc():
    def __init__(self):
        self.a = []


def somefunc(var):
    pass


if __name__ == "__main__":
    aaa = abc()
    bbb = abc()
    bbb.a = aaa.a
    somefunc(aaa.a)

现在somefunc应该确定应该引用aaa还是bbb吗?

答案 1 :(得分:0)

如果确实愿意,您可以,但我不建议这样做。

class abc():
    def __init__(self,a):
        self.a = a

def somefunc(value):
    vars_dict = globals()         # swap this for whatever dictionary of variables you wish to use 
    abcs = [vars_dict[i] for i in vars_dict if isinstance(vars_dict[i],abc)]
    return [instance for instance in abcs if instance.a == value]

if __name__ == "__main__":
    instance1 = abc(1)
    instance2 = abc(2)
    instance3 = abc(1)
    print('1s: {}'.format(str(somefunc(1))))
    print('2s: {}'.format(str(somefunc(2))))
    print('3s: {}'.format(str(somefunc(3))))

这会从vars_dict抓取与instance.a == value在一起的所有实例。我已经在这里实现了globals()dict,但是您可以根据需要将其替换为另一本词典。

享受!

答案 2 :(得分:0)

您可以将实例用作参数。

class abc():

    def __init__(self, num):
        self.a = num

def somefunc(var):
    print(var.a)

if __name__ == "__main__":
    aaa = abc(2)
    somefunc(aaa)
    bbb = abc(4)
    somefunc(bbb)