使用一个变量来命名另一个variab

2024-10-01 09:37:05 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个dogs字典,其中key是dog的名称,value是一个类dog的实例。你知道吗

my_dogs = {'Ollie': Dog(...), 'Lassie': Dog(...)}

如果我想认识我的狗,我可以用钥匙接近它们

my_dogs['Ollie']

我想把这个结构作为一个类,比如

class MyDogs():
    def __init__(self):
        self.ollie = Dog()
        self.lassie = Dog()

所以我可以像这样接近我的狗:

my_dogs = MyDogs()
my_dogs.lassie   

使用字典,我可以为我的狗创建任何名字,只需将键设置为它的名字,但是在类中变量是硬编码的,这是我不想要的。你知道吗

问题:我可以定义一个名称存储在另一个变量中的变量吗?比如:

class MyDogs():
    def __init__(self, dog_names):
        self.eval(dog_names[0]) = Dog()
        self.eval(dog_names[1]) = Dog()

这样MyDogs将有两个实例,它们以作为参数传递的dog\u名称命名。你知道吗

这可能吗?这是一个好的做法还是我应该有不同的结构?你知道吗


Tags: 实例self名称字典namesinitmydef
2条回答

可能是过度杀戮,但您可以使用MutableMapping实现一个模仿字典的类,这样您就可以拥有您建议的接口:

from collections.abc import MutableMapping


class Dog:

    def __init__(self, name):
        self.name = name  

    def __repr__(self):
        return str(self.name)


class MyDogs(MutableMapping):

    def __init__(self, dog_names):
        for name in dog_names:
            self[name] = Dog(name)

    def __getitem__(self, key):
        return self.__dict__[key]

    def __setitem__(self, key, value):
        self.__dict__[key] = value

    def __delitem__(self, key):
        del self.__dict__[key]

    def __iter__(self):
        return iter(self.__dict__)

    def __len__(self):
        return len(self.__dict__)


my_dogs = MyDogs(['lassie', 'ollie'])
print(my_dogs.lassie)
print(my_dogs.ollie)

输出:

'lassie'
'ollie'

你可以用setattr来做这个

class MyDogs():
    def __init__(self, dog_names):
        for dog_name in dog_names:
          setattr(self, dog_name, Dog())

相关问题 更多 >