初级Python类

初级Python类,python,class,button,Python,Class,Button,我现在有这样一个代码,如果按下ToggleButton,我希望它说 ToggleButton was pressed 然后说明ToggleButton是开还是关(默认情况下,它是开的,如果按下按钮,它将关闭)。我想通过状态为真或假来实现这一点,但我不确定如何实现。 任何帮助都将不胜感激 class Button(object): def __init__(self, text = "button"): self.label = text def press(

我现在有这样一个代码,如果按下ToggleButton,我希望它说

ToggleButton was pressed
然后说明ToggleButton是开还是关(默认情况下,它是开的,如果按下按钮,它将关闭)。我想通过状态为真或假来实现这一点,但我不确定如何实现。 任何帮助都将不胜感激

class Button(object):

    def __init__(self, text = "button"):
        self.label = text

    def press(self):
        print("{0} was pressed".format(self.label))
class ToggleButton(Button):

   def __init__(self, text="ToggleButton", state=True):
        self.label = text
比如我想要

b = ToggleButton()
b.press()
返回:

ToggleButton was pressed
ToggleButton is now OFF

谢谢

只需添加一个
self.state
变量:

class ToggleButton(Button):
    def __init__(self, text="ToggleButton", state=True):
        super(ToggleButton, self).__init__(text) 
        self.state = state

    def press(self):
        super(ToggleButton, self).press()
        self.state = not self.state
        print('ToggleButton is now', 'ON' if self.state else 'OFF')

我认为其他的答案还没有完全回答你的问题,所以我来试一试。您已经很好地设置了类层次结构;现在需要做的是覆盖
方法来处理新数据(切换当前状态)。这很简单!考虑下面的类:

class ToggleButton(Button):
    def __init__(self, text="ToggleButton", state=True):
        self.label = text
        self.state = state

    def press(self):
        # Call the superclass press() method
        # Note that pre-Python 3, the call needs to be super(ToggleButton,self)
        super().press()

        # Toggle state
        self.state = not self.state

        # Print current state
        print('{0} is now {1}'.format(self.label,'ON' if self.state else 'OFF'))
新的
press
方法只做三件事:

  • 首先,它调用超类的
    press
    方法(
    按钮
    )。这可以防止您必须复制代码以打印“Button was pressed”(按钮已按下),或者您可能最终放入基本
    按钮
    类中的任何其他代码
  • 其次,它切换当前状态。这部分不需要太多解释
  • 最后,它打印出一条关于按钮新状态的消息
就这些!我希望这能帮你清理一下这个过程