m0_74057756 2022-10-08 23:54 采纳率: 66.7%
浏览 23
已结题

一个关于简化类的创建的问题

前提:用的语言是Python,但是我也想知道Java和c++怎么处理相同的问题。
我创建了一个按钮类,用来构建按钮。这个类有三个方法,分别是__init__,负责构造函数.。click,负责处理点击事件,它会播放特效,然后调用event。event,负责处理点击的效果。
但我发现每种按钮效果都不一样,我就只好多创建几个类,像开始按钮类,下一关按钮类,暂停按钮类等,然后让它们都继承按钮类,分别重写event方法。但这样导致我多写了好多类,而且这些类绝大部分都只有一个实例,我觉得这样很浪费。
有什么方法可以简化吗?

  • 写回答

2条回答 默认 最新

  • 於黾 2022-10-09 08:24
    关注

    在java、c++里,这类代码通常是写在按钮事件的回调函数里面的
    而回调函数直接写在窗体类里面,不会单独为了几句代码封装一个类出来
    作为一个按钮,最重要的作用就是当点下的时候能够触发一个事件执行,而到底执行什么应该是基于委托,交由外部来实现的,而不是写死在按钮里面
    python做这个要比java方便,python不需要委托,它的变量就可以直接保存函数
    你完全可以在创建按钮的时候将要执行的函数作为参数传递进去,然后按钮按下时就直接执行这个函数

    class button:
        def __init__(self,func):
            self.func=func  # 实例化时先把传进来的函数保存住,别弄丢了
        def click(self):
            self.func()  # 直接执行这个函数
    
    def button_click():
        ...   #do something
    b=button(button_click)
    

    如果你想一个按钮能够响应多个事件,那就不要这样初始化时只传递一个函数
    而是定义一个self.onclick=[]
    那么当你需要执行什么函数,就b.onclick+=[func],就把函数加进列表里了,那么click的时候遍历一下onclick执行就好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月8日

悬赏问题

  • ¥15 openwrt双栈NAT
  • ¥15 部分网页页面无法显示!
  • ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
  • ¥15 QTOF MSE数据分析
  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用