自动实例化对象

时间:2020-07-03 20:07:44

标签: python class oop instantiation

players_list = [Ani, Paty, Felix, Alex]

class Player:

def __init__(self, name):
    self.name = name
    self.score = 0
    self.vote = 0
    self.player_hand = []
    self.choice = ''
    self.player_hand = []
            
def player_turn(self):
    print(self.name, "'s turn")


def p_vote(self):
    print(self.name, " voted")

我尝试遍历该列表,但它总是给我一个错误:NameError: name 'Ani' is not defined

for player in players_list:
    player = Player(str(player))

但是手动完成所有过程:

Ani = Player("Ani")

有什么办法可以使这个过程自动化?

3 个答案:

答案 0 :(得分:2)

首先,您应该知道,已声明的import {Message, IMessage} from "./models"; function serialize(data: object, thriftModel: any): any { const buffer = Buffer.from(JSON.stringify(data)); const transport = new thrift.TFramedTransport(buffer); const binary = new thrift.TBinaryProtocol(transport); thriftModel.write(binary); // @ts-ignore return transport.outBuffers; } const response: IMessage = { platform: global.PLATFORM, chatId: Date.now()+"212", text: "", data: "", user: { platformUserId: r.userProfile.id+"", firstName: fullName[0], lastName: fullName[1], languageCode: "RU", username: undefined, latitude: 40.741895, longitude: -73.989308, phoneNumber: undefined } }; const message = new Message(response); //.... kafka import, register a producer, send it in kafka topik const payloads = [{ topic: 'my_topic', messages: serialize(response, message), key: Date.now()+""}]; producer.send(payloads, (error, data) => { //... }); 不包含字符串,它们被视为您在任何地方都未定义的变量,因此players_list。 / p>

现在,如果您要更正此问题,并且实际上打算将Player的对象存储在NameError中,则可以执行以下操作:

players_list

这会将Player对象存储在您声明的列表中,只是您希望获得的东西。

答案 1 :(得分:0)

您遇到了无法定义播放器的问题。因此players_list = [Ani, Paty, Felix, Alex]将引发错误,因为对象AniPatyFelizxAlex不存在。

 class Player:
    def __init__(self, name):
        self.name = name
        self.score = 0
        self.vote = 0
        self.player_hand = []
        self.choice = ''
        self.player_hand = []
            
    def player_turn(self):
        print(self.name, "'s turn")


    def p_vote(self):
        print(self.name, " voted")

现在,我们需要遍历列表。

players_list = ['Ani', 'Paty', 'Felix', 'Alex']
players = [Player(player) for player in players_list]

答案 2 :(得分:0)

听起来像是您试图动态创建变量-写写代码的代码。

您可以尝试使用exec内置函数。

players = ['Ani', 'Paty', 'Felix', 'Alex']

class Player:
    def __init__(self, name):
        self.name = name

    def p_vote(self):
        print(self.name + " voted.")

for player in players:
    exec( "%s = Player( '%s' )" %(player, player) )

Ani.p_vote()

尽管如此,一般的互联网建议有两点要指出:

  • 请谨慎使用exec
  • Python的方式是写出变量,“显式优于隐式”。
相关问题