在python中传递类参数

在python中传递类参数,python,python-3.x,Python,Python 3.x,我有两门课 class Robot1: def __init__(self, name): self.name = name def sayHi(self): return "Hi, I am " + self.name class Robot2: def __init__(self, name): self.name = name def sayHello(self): return "Hell

我有两门课

class Robot1:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        return "Hi, I am " + self.name


class Robot2:
    def __init__(self, name):
        self.name = name
    def sayHello(self):
        return "Hello, I am " + self.name

robot_directory = {1: Robot1(), 2: Robot2()}

def object_creator(robo_id, name):
    robot_object = robot_directory[robo_id]
    return robot_object
但是我不知道如何在
robot\u object=robot\u目录[robo\u id]
行实例化类时传递变量
name
。如何传递变量?

也许您可以试试

class Robot1:
    def __init__(self):
        pass

    def set_name(self, name):
        return "Hi, I am " + name


class Robot2:
    def __init__(self):
        pass

    def set_name(self, name):
        return "Hello, I am " + name


robot_directory = {1: Robot1(), 2: Robot2()}


def object_creator(robo_id, name):
    robot_object = robot_directory[robo_id]
    return robot_object.set_name(name)
也许你可以试试

class Robot1:
    def __init__(self):
        pass

    def set_name(self, name):
        return "Hi, I am " + name


class Robot2:
    def __init__(self):
        pass

    def set_name(self, name):
        return "Hello, I am " + name


robot_directory = {1: Robot1(), 2: Robot2()}


def object_creator(robo_id, name):
    robot_object = robot_directory[robo_id]
    return robot_object.set_name(name)

您正在字典中存储已创建的实例。而是存储类本身:

# ...
robot_directory = {1: Robot1, 2: Robot2}
def object_creator(robo_id, name):
    robot_class = robot_directory[robo_id]
    # Here, the object is created using the class
    return robot_class(name)
显然,这要求所有robot类都具有相同的
\uuuu init\uuu
参数


更进一步,您可能希望研究继承并为您的机器人使用公共基类。

您正在字典中存储已创建的实例。而是存储类本身:

# ...
robot_directory = {1: Robot1, 2: Robot2}
def object_creator(robo_id, name):
    robot_class = robot_directory[robo_id]
    # Here, the object is created using the class
    return robot_class(name)
显然,这要求所有robot类都具有相同的
\uuuu init\uuu
参数


更进一步,您可能希望研究继承并为您的机器人使用公共基类。

此代码不应该工作。只要点击
robot\u directory=
,调用
Robot1()
就会失败,因为缺少参数
TypeError:\uu init\uu()缺少1个必需的位置参数:“name”
。你能澄清一下你想要达到的目标吗?另外,使用只有顺序数字键的dict是一种反模式——使用一个简单的旧列表。它将失败,因为未传递参数
name
。我想知道,如果我试图从字典中选择类,如何传递参数。只有在调用函数
object\u creator
时,我才会知道要传递的参数。我是说,您甚至不会走那么远
robot_目录={1:Robot1(),2:Robot2()}
无效,因此不能以这种方式初始化dict,更不用说从中选择类了。创建一个列表
robot\u目录=[]
并在需要创建新目录时使用
robot\u目录.append(robot(name))
。此代码不应该工作。只要点击
robot\u directory=
,调用
Robot1()
就会失败,因为缺少参数
TypeError:\uu init\uu()缺少1个必需的位置参数:“name”
。你能澄清一下你想要达到的目标吗?另外,使用只有顺序数字键的dict是一种反模式——使用一个简单的旧列表。它将失败,因为未传递参数
name
。我想知道,如果我试图从字典中选择类,如何传递参数。只有在调用函数
object\u creator
时,我才会知道要传递的参数。我是说,您甚至不会走那么远
robot_目录={1:Robot1(),2:Robot2()}
无效,因此不能以这种方式初始化dict,更不用说从中选择类了。创建一个列表
robot\u目录=[]
并在创建新目录时使用
robot\u目录.append(robot(name))