在Python中重新定义类实例

时间:2018-01-29 17:02:08

标签: python class oop

我正在使用globals变量来迁移我所拥有的项目,实际上具有由单独模块中定义的类定义的结构。这是我第一次真正使用OOP,所以想要了解重新定义类的实例是否安全,或者我的代码是否遗漏了什么。

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

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对象引用为首选其他而不是home / away,因此我使用了我定义的方法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()

重新定义这些类实例是安全的(ex - 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

1 个答案:

答案 0 :(得分:0)

作为对该问题的后续,似乎完全可以安全地将对象分配给另一个名称,以供以后在代码中使用而没有问题(按照下面的示例)。

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)