繁体   English   中英

在Python中重新定义类实例

[英]Redefine Class Instances in Python

我正在从一个充满globals变量的项目迁移到一个实际上具有由在单独模块中定义的类定义的结构的项目。 这是我第一次真正使用OOP,因此想了解重新定义Class实例是否安全或者我的代码缺少某些内容。

在代码的顶部,我导入了我的模块-

import NHLGameEvents
config = configparser.ConfigParser()
config.read('config.ini')

TEAM_BOT = config['DEFAULT']['TEAM_NAME']

然后,我构建两个Team对象(在我的NHLGameEvents模块中定义)。

game_today, game_info = is_game_today(get_team(TEAM_BOT))

awayteam_info = game_info["teams"]["away"]["team"]
awayteamobj_name = awayteam_info["name"]
awayteamobj_shortname = awayteam_info["teamName"]
awayteamobj_tri = awayteam_info["abbreviation"]
away_team_obj = NHLGameEvents.Team(
    awayteamobj_name, awayteamobj_shortname, awayteamobj_tri, "away")
game_obj.register_team(away_team_obj, "away")

hometeam_info = game_info["teams"]["home"]["team"]
hometeamobj_name = hometeam_info["name"]
hometeamobj_shortname = hometeam_info["teamName"]
hometeamobj_tri = hometeam_info["abbreviation"]
home_team_obj = NHLGameEvents.Team(
    hometeamobj_name, hometeamobj_shortname, hometeamobj_tri, "home")
game_obj.register_team(home_team_obj, "home")

home_team_obj.preferred = bool(home_team_obj.team_name == TEAM_BOT)
away_team_obj.preferred = bool(away_team_obj.team_name == TEAM_BOT)

在某些情况下,我想引用这些Team首选 ,而不是家里的对象/远,所以我用我的定义的方法, Game类来检索。 由于我的Game对象知道我的两个Teams ,因此我的Game类中返回此元组的方法是-

def register_team(self, team, key):
    """Registers a team to the instance of the Game."""

    if key not in ('home', 'away'):
        raise AttributeError(
            "Key '{}' is not valid - Team key can only be home or away.".format(key))

    if len(self.teams) > 1:
        raise ValueError(
            "Too many teams! Cannot register {} for {}".format(team, self))
    self.teams[key] = team
    team.game = self
    team.tv_channel = self.broadcasts[key]


def get_preferred_team(self):
    """Returns a Tuple of team objects of the preferred & other teams."""
    if self.teams["home"].preferred is True:
        return (self.teams["home"], self.teams["away"])

    return (self.teams["away"], self.teams["home"])

然后,我可以从脚本中的任何位置检索该信息。 preferred_team_obj,other_team_obj = game_obj.get_preferred_team()

它是安全的重新定义这些类的实例(例如- home_team_obj也被称为preferred_team_obj ),或者我应该只使用一个if语句,每当我想引用这些,比如-

if home_team_obj.preferred:
    # Do something with home_team_obj
else:
    # Do something with away_team_obj

就像对该问题的跟进一样,将对象分配给另一个名称以供稍后在代码中使用时没有问题(按照下面的示例)似乎完全安全。

preferred_team = game.preferred_team
preferred_homeaway = preferred_team.home_away
on_ice = json_feed["liveData"]["boxscore"]["teams"][preferred_homeaway]["onIce"]
players = json_feed["gameData"]["players"]
if recent_event(play):
    get_lineup(game, event_period, on_ice, players)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM