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

时间:2016-04-07 13:42:07

标签: python function class

我正在开发一个项目,我需要从一个类动态创建一些对象。我不是要求任何人解决它,而只是指出我正确的方向。一个例子是如果我和狗一起工作。

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"来自全班。我只是想找到一个好方法来做到这一点,如果有的话。如果这是完全反对python我会找到另一种方式,但我坐在这里卡住了。我也考虑过在我的函数中嵌套类,但命名空间不会进入全局。

3 个答案:

答案 0 :(得分:0)

也许你想制作一个替代构造函数?

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,即可访问类属性Dog.members

答案 1 :(得分:0)

你可以创建一个全局词典

dogs = {}

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

答案 2 :(得分:0)

更改 locals :(这仍然很糟糕,但不如更改 globals

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


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