试图通过调用函数从类创建对象

2024-04-25 05:01:24 发布

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

我正在做一个项目,我需要从一个类中动态地创建一些对象。我不是要求任何人来解决这个问题,只是给我指出了正确的方向。举个例子,如果我和狗一起工作。你知道吗

class Dog(object):
    """Creating Dogs"""
    def __init__(self, name, age, gender):
        super(Dog, self).__init__()
        self.name = name
        self.name = age
        self.name = gender

不过,我希望有一个函数,我可以把这些信息传递到其中,从而创建一个全局对象。函数如下所示:

def create_dog(name, age, gender):
    name = Dog(name,age, gender)
    return(name)

所以理论上,如果我把名字“Jack”传递给函数,我会从类中得到一个全局称为“Jack”的对象。我只是想找到一个好方法来做这件事,如果有的话。如果这是完全反对python,我会想出另一种方法,但我坐在这里卡住了。我也考虑过在函数中嵌套类,但是名称空间不会进入全局。你知道吗


Tags: 项目对象方法函数nameselfageinit
3条回答

随着变化局部变量:(这仍然很糟糕,但不如变化全局变量

def create_dog(name, age, gender, locals_=locals()):
    dog = Dog(name, age, gender)
    locals_[name] = dog


create_dog("jack", 3, "male")
print(jack)

你可以创建一个全局字典

dogs = {}

def create_dog(name, age, gender):
    # maybe check if already exists
    dogs[name] = Dog(name, age, gender)

也许你想做一个替代的构造器?你知道吗

class Dog(object):
    """Creating Dogs"""
    def __init__(self, name, age, gender):
        super(Dog, self).__init__()
        self.name = name
        self.name = age
        self.name = gender


   @classmethod
   def create_dog(name, age, gender):
       name = Dog(name,age, gender)
       return name

另见讨论Meaning of @classmethod and @staticmethod for beginner?

如果使用单个文件脚本,则可以使用全局字典,但对于更复杂的软件,则必须导入所有3个元素:

 from dogs import dogs, create_dog, Dog

使用class属性只导入一个名称空间。所以你可以这样做:

class Dog(object):
    """Creating Dogs"""

    members = []

    def __init__(self, name, age, gender):
        super(Dog, self).__init__()
        self.name = name
        self.name = age
        self.name = gender


   @classmethod
   def create_dog(name, age, gender):
       name = Dog(name,age, gender)
       Dog.members.append(name)
       return name

现在您可以简单地import Dog,并访问class属性Dog.members

相关问题 更多 >