Python перейти от атрибута к своему классу - PullRequest
1 голос
/ 06 октября 2019

Предположим, у меня есть этот код:

class abc():

    def __init__(self):
        self.a = 0


def somefunc(var):
    pass


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

Теперь мой вопрос, есть способ получить экземпляр класса (aaa) по его атрибуту (a), который передается "somefunc", если яесть только атрибут? Другими словами, чтобы перейти от атрибута к его классу.

Я знаю, что это не популярно, но у меня есть ситуация, которая заставляет меня.

Спасибо за помощь !!! !

Ответы [ 3 ]

3 голосов
/ 06 октября 2019

Ответ - нет.

Предположим, у меня есть этот код:

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)

Теперь кто-то должен определить, что он должен ссылаться на aaa или bbb?

0 голосов
/ 06 октября 2019

Вы можете использовать экземпляр в качестве параметра.

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)
0 голосов
/ 06 октября 2019

Вы можете, если действительно хотите, но я бы не советовал.

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 (), но вы можете поменять его на другой словарь в зависимости от ситуации.

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...