self.和下划线的区别

 1.首先通过self.xxx 通过访问的方法的引用:包含了set和get方法。而通过下划线是获取自己的实例变量,不包含set和get的方法。

 2.self.xxx是对属性的访问;而_xxx是对局部变量的访问。所有被声明为属性的成员,再ios5之前需要使用编译指令@synthesize 来告诉编译器帮助生成属性的getter和setter方法,之后这个指令可以不用认为的指定了,默认情况下编译器会帮助我们生成。编译器在生成getter,setter方法时是有优先级的,他首先查找当前的类中用户是否定义属性的getter,setter方法,如果有,则编译器会跳过,不会再生成,使用用户定义的方法。也就是说你在使用self.xxx时是调用一个getter方法。会使引用计数加一,而_xxx不会使用引用计数加一的。

    使用self.xxx是更好的选择,因为这样可以兼容懒加载,同时也避免了使用下滑线的时候忽略了self这个指针,self.容易在BLock中造成循环引用(block是个独立的运行单元,block中的self是强引用,例如加载完数据在block中使用self.tableView reloadData,会出现循环引用内存泄漏,可以定义_weak typeof(self)weakSelf = self ,用weakSelf弱引用代替self强引用从而避免循环引用问题)。同时,使用 _是获取不到父类的属性,因为它只是对局部变量的访问。

最后总结:self方法实际上是用了get和set方法间接调用,下划线方法是直接对变量操作。

class drugWindow(QMainWindow): def __init__(self,drug_name): super().__init__() self.ui = Ui_drugWindow() self.ui.setupUi(self) self.drug_name = drug_name self.ui.tabWidget.setCurrentIndex(0) self.ui.textEdit.setReadOnly(True) # 初始状态为只读 self.load_drug_data(drug_name) #设置table的宽度 self.ui.tableWidget_2.setColumnWidth(0, 60) self.ui.tableWidget_2.setColumnWidth(1, 1220) #设置字体选项 self.ui.fontComboBox.setWritingSystem(QFontDatabase.SimplifiedChinese) #过滤掉英文字体 self.ui.fontComboBox.setToolTip("字体") #设置鼠标悬停提示 self.ui.fontComboBox.currentFontChanged.connect(self.change_font) #设置函数去应用 self.updating_font = False #初始化,防止卡死后二次点击 #设置字体大小 self.ui.comboBox.setToolTip("字号") for size in range(8, 72, 2): self.ui.comboBox.addItem(str(size)) self.ui.comboBox.setCurrentText("12") self.ui.comboBox.currentTextChanged.connect(self.change_font_size) #字体样式 self.ui.pushButton.setToolTip("加粗") self.ui.pushButton.clicked.connect(self.change_font_bold) self.ui.pushButton_2.setToolTip("斜体") self.ui.pushButton_2.clicked.connect(self.change_font_italics) self.ui.pushButton_3.setToolTip("下划线") self.ui.pushButton_3.clicked.connect(self.change_font_underline) self.ui.pushButton_4.setToolTip("下划线颜色") self.ui.pushButton_4.clicked.connect(self.change_font_underline_color) #设置字体颜色 self.ui.pushButton_22.clicked.connect(self.change_font_color) self.ui.pushButton_22.setToolTip("字体颜色") #设置系统光标实时更新字体样式大小 self.ui.textEdit.cursorPositionChanged.connect(self.update_font_controls) #设置字体对齐方式 self.ui.pushButton_14.clicked.connect(self.align_left) self.ui.pushButton_14.setToolTip("左对齐") self.ui.pushButton_15.clicked.connect(self.align_center) self.ui.pushButton_15.setToolTip("居中") self.ui.pushButton_16.clicked.connect(self.align_right) self.ui.pushButton_16.setToolTip("右对齐") #设置插入表格功能 self.ui.pushButton_17.clicked.connect(self.show_insert_table_dialog) self.ui.pushButton_17.setToolTip("插入表格") self.last_table = None # 保存最后插入的表格对象 #设置鼠标右键 self.ui.textEdit.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.textEdit.customContextMenuRequested.connect(self.show_custom_context_menu) #设置段间距 self.ui.pushButton_21.clicked.connect(self.set_custom_line_spacing) self.ui.pushButton_21.setToolTip("段间距") #设置撤回按钮 self.ui.pushButton_13.clicked.connect(self.on_undo) self.ui.pushButton_13.setToolTip("撤回") from PyQt5.QtWidgets import QShortcut self.undo_shortcut = QShortcut(QKeySequence("Ctrl+Z"), self) self.undo_shortcut.activated.connect(self.on_undo) #设置繁体转换 self.ui.pushButton_19.clicked.connect(self.enable_realtime_conversion) self.ui.pushButton_19.setToolTip("繁简体转换") self.cc = opencc.OpenCC('s2t') # 简体转繁体 self.is_traditional = False # 当前是否为繁体 self.converting = False # 是否开启自动转换 self.last_text = "" # 用于防止无限递归 #设置导入图片 self.ui.pushButton_20.clicked.connect(self.import_selected_images) self.ui.pushButton_20.setToolTip("插入图片") #设置超链接到table中 self.ui.pushButton_23.clicked.connect(self.insert_folder_link) self.ui.tableWidget_2.cellDoubleClicked.connect(self.open_folder_from_table) #保存按钮 self.ui.pushButton_D_save.clicked.connect(self.save_content) #附件按钮 self.ui.pushButton_5.clicked.connect(self.check_and_create_folder) self.ui.pushButton_5.setToolTip("附件") #修改按钮 self.ui.pushButton_D_revise.clicked.connect(self.enable_edit) #返回按钮 self.ui.pushButton_D_back.clicked.connect(self.back) self.showMaximized() 如何增加一个搜索按钮,点击后可以搜索文本,点击确认时高亮对应的文本信息,关闭后高亮取消
最新发布
08-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值