我有一个包含三个不同类的文件different_classes
。它类似于:
class first(object):
def __init__(x, y, z):
body of the first class
class second(first):
def __init__(x, y, z, a=2, b=3):
body of the second class
class third(object):
def __init__(x, y, z):
body of the third class
现在我有另一个文件,比如main.py
,我希望能够传递需要调用的类的名称。例如,我现在做:
import different_classes
def create_blah():
instance = different_classes.first()
rest of the function body
当我想使用different_classes
中的第一堂课时。如果我想使用类second
,我使用different_classes.second()。
我可以在create_blah
函数中输入类名作为参数。类似的东西:
def create_blah(class_type = "first", x=x1, y=y1, z=z1):
instance = different_classes.class_type(x, y, z)
我知道这可能无效......但想知道是否可以做类似的事情。谢谢!
答案 0 :(得分:10)
不是传递类的名称,为什么不直接传递类本身:
def create_blah(class_type = different_classes.first, x=x1, y=y1, z=z1):
instance = class_type(x, y, z)
请记住,类只是Python中的其他对象:您可以将它们分配给变量并将它们作为参数传递。
如果您确实需要使用该名称,例如因为您是从配置文件中读取它,然后使用getattr()
来检索实际的类:
instance = getattr(different_classes, class_type)(x, y, z)
答案 1 :(得分:0)
def create_blah(class_type = "first", x=x1, y=y1, z=z1):
class_ = different_classes.__dict__.get(class_type, None)
if isinstance(class_, type):
instance = class_(x, y, z)
您还可以传递类对象:class_ = different_classes.first
。
答案 2 :(得分:-1)
排序。 Thare是比较好的方式,但我建议这样做。
def create_blah(class_type = "first", x=x1, y=y1, z=z1):
if class_type == "first":
instance=different_classes.first(x,y,z)
...