我正在开发一个项目,我需要从一个类动态创建一些对象。我不是要求任何人解决它,而只是指出我正确的方向。一个例子是如果我和狗一起工作。
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我会找到另一种方式,但我坐在这里卡住了。我也考虑过在我的函数中嵌套类,但命名空间不会进入全局。
答案 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)