前提:用的语言是Python,但是我也想知道Java和c++怎么处理相同的问题。
我创建了一个按钮类,用来构建按钮。这个类有三个方法,分别是__init__,负责构造函数.。click,负责处理点击事件,它会播放特效,然后调用event。event,负责处理点击的效果。
但我发现每种按钮效果都不一样,我就只好多创建几个类,像开始按钮类,下一关按钮类,暂停按钮类等,然后让它们都继承按钮类,分别重写event方法。但这样导致我多写了好多类,而且这些类绝大部分都只有一个实例,我觉得这样很浪费。
有什么方法可以简化吗?
一个关于简化类的创建的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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执行就好本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 openwrt双栈NAT
- ¥15 部分网页页面无法显示!
- ¥15 怎样解决power bi 中设置管理聚合,详细信息表和详细信息列显示灰色,而不能选择相应的内容呢?
- ¥15 QTOF MSE数据分析
- ¥15 平板录音机录音问题解决
- ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
- ¥15 (SQL语句|查询结果翻了4倍)
- ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
- ¥50 .net core 并发调用接口问题
- ¥15 网上各种方法试过了,pip还是无法使用