前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >明明都定义好了,怎么还是说我没有声明啊?

明明都定义好了,怎么还是说我没有声明啊?

作者头像
马拉松程序员
发布2022-06-15 12:38:06
5650
发布2022-06-15 12:38:06
举报
文章被收录于专栏:马拉松程序员的专栏

今天五四青年节,祝大家青年节快乐!

闲来无事在家学习,突然有位粉丝发消息来问0这样的问题:明明都定义好了,还是说我没有声明啊?

为什么呢?因为你不是明明。

好了,看具体问题,原代码如下:

看代码的内容,大概是想实现输入一个关键词,查询zsms(我也不知道这是啥名字的拼音缩写)中包含关键词的内容,然后通过基础窗口控件QWidget展示出来。

现在在执行查询语句的时候,val这个变量传不到sql语句里,实在不知道咋搞了,来求教我了。

这都是一些基础问题,这个粉丝也是一位刚刚入行学习的小白,能看出来相关语法理解还是不透彻。

那么我就按照粉丝给我发的代码截图中内容,说下代码中的问题,互相学习,互相进步,我理解的不一定都对啊,仅供参考。

在截图的代码中,Demo类的中添加了一个还有def __init__(self):方法,这是此类的构造方法,这个跟Java的不太一样,Java的写法应该是Demo()。

然后,又编写了intiUI的方法,大概实现的内容就是刚才所讲的内容。问题是出在了val变量上。Sql执行代码的意思写一个动态传参,按照传入的关键词进行模糊搜索,但是现在找不到val变量。

这里呢,很简单,要是想取到初始化传入的val值,加上一个self.val就可以。self是什么?意思是类实例化后,self即代表着实例(对象)本身。从上下文中可以看出来,这里取val就是想拿初始化传入的val值。

相当于是这里,self.val就是在取Demo(“val”)传入的值。如果不加self,那么就是方法内部的局部变量,你使用的时候,需要传入或者定义。那么就得这么写def initUI(self, val):,在__init__中需要写成self.initUI(val)

虽然感觉有点别扭,但是能跑就行。毕竟写代码的理念就是,先上线,又优化。能跑起来再说。

除此之外,就截图代码中的还有潜在的问题。

  • 从sql的编写来看,命名不规范,zsms,zsbt,这是属性注释的拼音首字母,尤其这个表名。如果做二次开发,要是没有文档,我真是猜不出来啥意思。关于对变量、属性、类名如何命名,可以自行搜索阿里公开的《开发规范》
  • 其次,从使用到的cx_oracle上判断用的oracle,从新手学习角度,不建议上来就用oracle数据库,推荐先学MySQL。
  • 再者,从抽象和封装以及面向对象的设计理念上,intiUI方法中不适合把数据库的链接和QWidget的初始化,都放到这里面。这些属于对业务逻辑不相关的内容,可以抽离出来,做成公共方法类,数据库连接池,而不是在业务逻辑中处理这些问题。

最后再分享一个传参取值的小tips,在使用字符串拼接的时候,经常会遇到一些占位符,或者变量需要传参的情况,可以使用下面方法2。

代码语言:javascript
复制
    def initUI(self, val):
        # 方法1
        sql1 = "select  * from table a where title like %s and a=%s " % (val, val)
        # 方法2
        sql2 = f"select  * from table a where title like %{val}% and a={val}"
        print(sql2)

如果sql的参数的比较多,使用方法2不容易写错位置。

不过还是刚开始那句话,对于初学者来说,先实现后优化,能跑起来的代码就是好代码。

好了,今天就分享到这里,希望对你有用。

我是马拉松程序员,可不至于代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马拉松程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档