简体   繁体   English

在Python中重新定义类实例

[英]Redefine Class Instances in Python

I am migrating a project I have from being littered with globals variables to actually have a structure defined by classes defined in a separate module. 我正在从一个充满globals变量的项目迁移到一个实际上具有由在单独模块中定义的类定义的结构的项目。 This is my first time really using OOP so want to understand if it is safe to re-define an instance of a Class or if my code is missing something. 这是我第一次真正使用OOP,因此想了解重新定义Class实例是否安全或者我的代码缺少某些内容。

At the top of my code, I import my module - 在代码的顶部,我导入了我的模块-

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

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

I then build two Team objects (defined in my NHLGameEvents module). 然后,我构建两个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)

In some instances, I want to reference these Team objects as preferred and other as opposed to home / away so I use a method defined in my Game class to retrieve that. 在某些情况下,我想引用这些Team首选 ,而不是家里的对象/远,所以我用我的定义的方法, Game类来检索。 Since my Game object knows about both of my Teams , the method in my Game class that returns this Tuple is - 由于我的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"])

I can then retrieve that information from anywhere in my script. 然后,我可以从脚本中的任何位置检索该信息。 preferred_team_obj, other_team_obj = game_obj.get_preferred_team() preferred_team_obj,other_team_obj = game_obj.get_preferred_team()

Is it safe to redefine these class instances (ex - home_team_obj also known as preferred_team_obj ) or should I just use an if statement whenever I want to reference these, such as - 它是安全的重新定义这些类的实例(例如- 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

Just as a follow up to this question, it seems that is totally safe to refer to assign an object to another name for use later in the code with no issues (as per the example below). 就像对该问题的跟进一样,将对象分配给另一个名称以供稍后在代码中使用时没有问题(按照下面的示例)似乎完全安全。

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