通过字符串查找类

2024-09-28 17:25:52 发布

您现在位置:Python中文网/ 问答频道 /正文

import random

class Game():
    def __init__(self, username, gameId):
        self.users = []
        self.users.append(str(username))
        self.gameId = gameId

    def new_user(self, username):
        self.users.append(str(username))

    def remove_user(self, username):
        try:
            self.users.remove(username)
        except:
            print("[-] User not found!")

def generate_gameId(): 
    gameId = ""
    letters = 5
    while(letters>0):
        gameId += chr(random.randint(65, 90))
        letters-=1

    return(gameId)

lobby = []

for i in range(2):
    lobby.append(generate_gameId())
    lobby[i] = Game("Test", lobby[i])
    lobby[i].new_user("Test123")
    lobby[i].remove_user("Test123")

这是我为一个简单的网络游戏编写的代码,我将同时拥有多个游戏类,但我需要找到特定gameId的特定对象。配子ID是随机生成的。每次用户想要加入大厅时,他都必须输入gameId才能进入

您将如何实现这样的目标?我做错了吗?


Tags: selfgamenewdefusernamerandomusersgenerate
2条回答

其他人说了我要说的一切,所以我删除了我的大部分帖子,但如果你愿意,这里还有一些其他方面可以改进:

  1. 你不是在这里查找“类”。您正在查找一个类的实例,也称为对象。编程中的“类”一词总是指“对象的定义”。可以实例化类以使对象成为实例。一个很好的类比是,“类”是制造汽车的蓝图,而实例/对象是使用蓝图(类)制造的汽车本身

  2. 不要合并命名约定。如果将camel-case和snake-case结合起来,这绝不是一个好主意,请选择其中一个(python通常是snake-case)。具体来说,generate_gameId()应该是generate_game_id()。这只会使编写代码更容易,而不会出现拼写错误

代码中有一些东西可以重构:

  • Game类的构造函数中,不需要username参数,因为已经有了new_user方法:
class Game():
    def __init__(self, gameId):
        # Just create the list of users
        self.users = []
        self.gameId = gameId

# ...

lobby = []
for i in range(2):
    lobby.append(generate_gameId())
    lobby[i] = Game(lobby[i])

    # Use the `new_user` method to create a Test
    lobby[i].new_user("Test")
    lobby[i].new_user("Test123")
    lobby[i].remove_user("Test123")
  • 您正在将ID存储在一个整数列表中。如果游戏具有唯一id,则应使用字典:
lobby = {}
for i in range(2):
    game_id = generate_gameId()
    game = Game(game_id)

    # Create a entry in the dictionary
    lobby[game_id] = game
    
    game.new_user("Test")
    game.new_user("Test123")
    game.remove_user("Test123")

然后,您可以访问游戏列表及其ID:

for game_id, game in lobby.items():
    print(f'The game {game_id} has the following users:')
    for user in game.users:
        print(user)
    print()

相关问题 更多 >