当前位置: 首页 > 面试题库 >

在类属性更改时调用Python方法

单于钊
2023-03-14
问题内容

我正在编写一个API解析Twitter机器人,对OOP来说是个新手。我有一些依赖于全局变量的现有Python代码,并认为我可以借此机会学习。

我有以下Team类,这些类在解析API时会更新,并且希望在类属性更改时能够调用完全不相关的(外部)方法。

class Team(object):
  def __init__(self, team_name, tri_code, goals, shots, goalie_pulled):
    self.team_name = team_name
    self.tri_code = tri_code
    self.goals = goals
    self.shots = shots
    self.goalie_pulled = goalie_pulled

goalie_pulled对于现有实例,何时更改,Team我希望调用以下方法(伪代码):

def goalie_pulled_tweet(team):
  tweet = "{} has pulled their goalie with {} remaining!".format(team.team_name, game.period_remain)
  send_tweet(tweet)

两件事情 -

  1. 一旦检测到属性已更改,如何goalie_pulled_tweetTeam班级内部调用goalie_pulled
  2. 我可以Game从任何地方访问对象的实例,还是也需要将其传递给该变量?

问题答案:

您应该看看属性类。基本上,它使您可以封装行为和私有成员,而消费者甚至不会注意到它。

在您的示例中,您可能具有以下goalie_pulled属性:

class Team(object):
    def __init__(self, team_name, tri_code, goals, shots, goalie_pulled):
        # Notice the identation here. This is very important.
        self.team_name = team_name
        self.tri_code = tri_code
        self.goals = goals
        self.shots = shots

        # Prefix your field with an underscore, this is Python standard way for defining private members
        self._goalie_pulled = goalie_pulled

    @property
    def goalie_pulled(self):
        return self._goalie_pulled

    @goalie_pulled.setter
    def goalie_pulled(self, new_value):
        self._goalie_pulled = new_value
        goalie_pulled_tweet(self) #self is the current Team instance

从消费者的角度来看:

team = create_team_instance()

# goalie_pulled_tweet is called
team.goalie_pulled = 'some_value'

我建议您尽可能(且必须)使用属性,因为它们是一种很好的抽象方法。



 类似资料:
  • 问题内容: 有没有一种方法可以使用jQuery更改CSS类的属性,而不是元素属性? 这是一个实际的例子: 我上课有一个div 我想更改类背景属性,而不是已分配类背景的元素。 如果我使用jQuery .css()方法做到这一点: 它会影响现在具有class的元素。到这里为止一切都很好。但是,如果我进行Ajax调用,并在class中插入更多div ,则这些背景将不会具有绿色背景,而它们将具有初始背景。

  • 问题内容: Firefox的Firebug具有一个不错的功能,称为“属性更改中断”,在这里我可以标记任何对象的任何属性,并且它将在更改之前停止JavaScript执行。 我正在尝试在Google Chrome浏览器中实现相同功能,但是在Chrome调试器中找不到该功能。如何在Google Chrome浏览器中执行此操作? 问题答案: 如果您不介意弄乱源代码,则可以使用访问器重新定义属性。

  • 我有以下Java超类,每个属性都有构造函数、getter和setter: 和一个car子类,它扩展了vehicle超类,并具有几个独特的属性: 我创建一个新的vehicle对象链表,并向其中添加一个新的car对象: 我可以用下面这样的函数更改属于vehicle超级类的任何属性: 但是当我试图创建一个类似的函数来更改其中一个子类属性时,我得到了这个错误:“方法setWheels(int)对于类型Ve

  • 问题内容: 有人知道在python中跟踪字典对象更改的任何简便方法吗?我的工作水平很高,所以我有一些方法可以处理更改字典的操作,如果字典发生更改,我想调用一个函数来基本上执行Observer / Notify。 我要避免的是所有跟踪(设置布尔值)代码。希望有一种更轻松的方式来跟踪更改。这是一个简单的情况,但是可能存在更复杂的逻辑,这将导致我不得不设置更改的标志。 问题答案: 您可以从该类派生并在任

  • 我正在使用Flask构建一个应用程序,该应用程序在Google App Engine SDK上本地运行。出于某种原因,我的入口点是<code>main。py,仅启动一次。 < code>main.py: < code>myapp/bootstrap.py: 返回MyApp.Application的实例 < code > myapp/application . py : 扩展 Flask,注册路由,

  • 问题内容: 我喜欢引导程序示例的外观 但是我需要在 .bs-docs-example:之后 动态更改 内容 ,如下所示: __ 这有可能吗?怎么样? 问题答案: 实际上,我发现了一个不涉及的解决方案:之后(我对CSS太不好了,所以我没有早就考虑过…)我也对CSS有所了解。开始 : 并像这样使用它: 我希望能有所帮助。