是否有好的理由来存储对象列表作为“子属性”?在下面的示例中,我将几个动物对象存储在一个动物园中的animals
属性下,例如zoo.animals.<animal object referenced by name>
。这种语法使得访问存储的动物的属性更容易,我想知道这种结构的缺点是否还没有被考虑到:
class Animal(object):
def __init__(self, name, num_legs, furry):
self.name = name
self.num_legs = num_legs
self.furry = furry
class ObjAsAttributes(object):
def __init__(self, **kwargs):
for k,v in kwargs.items():
setattr(self, k, v)
class Zoo(object):
def __init__(self, animals):
self.name = 'my zoo'
self.hours = '8am-6pm'
animals = {animal.name:animal for animal in animals}
self.animals = ObjAsAttributes(**animals)
animal_list = [Animal(name='bird', num_legs=2, furry=False),
Animal(name='giraffe', num_legs=4, furry=True),
Animal(name='octopus', num_legs=8, furry=False)]
zoo = Zoo(animal_list)
zoo.animals.bird.num_legs
# returns 2
zoo.animals.bird.num_legs.talon_size
,这可能会变得非常混乱,我确实看到了很多这样的情况,但是如果您不打算很快添加到其中,我从未见过任何问题。 - GKE