在python中写class时很常用的方法是 @property 和 setter, 如下代码:
class Person(): def __init__(self, firstname, lastname): # 这里用self.firstname 而不是 self._firstname, # 用前者能在__init__里能调用 @firstname.setter self.firstname = firstname self.lastname = lastname @property def firstname(self): return self._firstname @firstname.setter def firstname(self, firstname): if not isinstance(firstname, str): raise TypeError('need a str') self._firstname = firstname #重复的代码 @property def lastname(self): return self._lastname @lastname.setter def lastname(self, lastname): if not isinstance(lastname, str): raise TypeError('need a str') self._lastname = lastname
这里有个问题,对属性的检查有重复的代码
改善 代码如下
class Name: def __init__(self, name): self.name = name def __get__(self, instance, cls): if instance is None: return self else: return instance.__dict__[self.name] def __set__(self, instance, value): if not isinstance(value, str): raise TypeError('need a str') instance.__dict__[self.name] = value class Person(): firstname = Name('firstname') lastname = Name('lastname') def __init__(self, firstname, lastname): self.firstname = firstname self.lastname = lastname if __name__ == '__main__': p = Person('aaa', 'bbb') p.firstname = 'ccc' p.lastname = 'ddd123' print (p.firstname, p.lastname)
相关推荐
句法: hFig = uiinspect(obj) 描述: UIINSPECT 检查对象句柄(例如,Java、COM、Handle Graphics、Matlab 类、Dot-Net 等)并在统一的 Matlab 窗口中显示检查结果。 UIINSPECT 显示一个统一的窗口,其中包含所有...
validate-api工具类主要被用于Java应用中的数据校验,它基于JSR 303(Bean Validation)和JSR 349(Bean Validation 1.1)标准,提供了对对象属性的有效性验证功能。这个工具类的正常运行依赖于一系列的jar包,这些...
- 验证功能是确保用户输入有效的关键部分,封装类可能包含了内置的验证机制,如对输入范围的检查。 4. **界面定制**: - 为了适应不同的UI需求,封装类可能提供设置标题、图标、按钮文本等界面元素的方法。 5. *...
3. 团队协作:确保团队成员使用统一的、与数据库同步的模型类,减少因理解差异产生的错误。 4. 代码一致性:通过自动化工具,保证所有属性的命名、注释和编码风格的一致性,提升代码质量。 四、扩展与优化 1. ...
而属性页则是对话框的一种特殊形式,它允许用户通过一个统一的框架访问和修改多个相关的设置,每个属性页就像一个单独的对话框,但它们共享一个标题栏和导航按钮。 实现基于对话框的属性页,我们需要以下步骤: 1....
单例模式通过`get_instance()`方法实现,该方法检查类的静态属性`$_instance`是否已经实例化,如果没有,则创建一个新的实例并返回。 类中定义了私有成员变量,如`$getdata`、`$postdata`、`$requestdata`、`$...
通过运行这个程序,用户可以批量选择文件或文件夹,然后统一更改这些属性,而无需手动逐个设置。这对于管理大量文件或文件夹非常有用,尤其在需要隐藏或保护特定资源时。 使用文件属性修改器的操作流程通常包括以下...
在对话框中,你可以输入或选择需要统一修改的属性信息。这可能包括多个属性字段,只需在对话框中逐一选中你想要修改的字段。例如,你可能要修改某一地区的名称、面积、人口等属性值,只需在相应的字段中填入新的值...
在本项目中,可能有一个基础的`SpellChecker`类,定义了通用的检查方法,然后有具体的检查器类(如`DictionaryBasedSpellChecker`)继承自它,并添加自己的特有功能,如加载自定义词典、优化检查算法等。 除此之外...
然而,BIM技术的进一步应用需要统一的模型格式和属性提取方法,而工业基础类(IFC)标准正是满足这一需求的关键技术。 IFC标准由国际协作联盟组织(IAI,现名BuildingSMART)提出,是一个公开的、结构化的、基于...
本文主要针对JavaScript对象的属性进行深入探讨,涉及属性检查、增加、删除、访问等几个方面。 首先,属性检查通常是为了确定对象是否拥有特定的属性。在JavaScript中,对象属性检查有几种方法,最常用的函数是`...
3. **数据管理**:利用AD17的数据管理工具,如“设计规则检查”(Design Rule Check, DRC) 和“设计数据库”(Design Data Management),来筛选或查找需要修改的字符属性。 4. **创建脚本**:AD17支持使用脚本来实现...
这个注解允许我们在控制器类或方法上使用,并通过`value`属性设置是否需要对请求体进行解密,默认值为`true`。 类似地,我们定义`EncryptResponse`注解: ```java @Target({ElementType.METHOD , ElementType.TYPE...
4. **六统一检查**:在电力行业,六统一是指“一次设备与二次设备的统一、保护与控制设备的统一、间隔层与站控层的统一、设备命名的统一、设备接口的统一、设备通信协议的统一”。六统一检查是确保变电站自动化系统...
它们是基于SystemVerilog的属性和行为语句构建的,可以方便地在验证环境中插入和配置。 2. **全局控制(Global Controls)** 全局控制是影响所有断言的设置,例如,`assertproperty`的超时限制或者全局的严重级别...
- 需求文档的编写风格应统一,避免不同部分出现矛盾。 - 对同一对象的术语和特征描述需一致,无自相矛盾之处。 - 检查是否存在冲突的需求,若存在,需要解决或调整。 4. **可追踪性**: - 需求应有明确的来源,...
5. **检查结果**:修改完成后,检查文件属性确认日期是否已更新。 需要注意的是,随意修改文件日期属性可能会对文件系统的正常运行造成干扰,因此在操作时应谨慎,避免对重要数据造成不可逆的影响。此外,某些系统...
为了解决这些问题,提出了严格采用官方下发的统一数据,使用拓扑规则确保数据的可靠性,以及通过编程语言实现高效的数据检查等应对措施。 总之,通过对福建省第三轮矿产资源规划县级数据库质量检查的研究,我们不仅...
在VB6(Visual Basic 6)开发环境中,批量修改控件属性是一项常见的需求,尤其是在处理大量窗体或者需要统一界面风格时。标题“vb6 批量修改控件属性解决方案”指的是通过编程的方式,一次性调整多个窗体或控件的...
- **代码复用和可扩展性**:通过getter和setter,代码可以更易于维护和扩展,因为它们提供了一个统一的接口来操作对象的属性。 3. **示例**: ```java public class User { private String name; private int ...