在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))
。