`

统一的类属性检查

 
阅读更多

在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)

 

分享到:
评论

相关推荐

    UIINSPECT - 显示对象的方法、属性和回调:检查对象句柄 (Java/COM/HG); 在统一窗口中显示其方法/属性/回调-matlab开发

    句法: hFig = uiinspect(obj) 描述: UIINSPECT 检查对象句柄(例如,Java、COM、Handle Graphics、Matlab 类、Dot-Net 等)并在统一的 Matlab 窗口中显示检查结果。 UIINSPECT 显示一个统一的窗口,其中包含所有...

    validate-api工具类校验类属性所需jar包集合

    validate-api工具类主要被用于Java应用中的数据校验,它基于JSR 303(Bean Validation)和JSR 349(Bean Validation 1.1)标准,提供了对对象属性的有效性验证功能。这个工具类的正常运行依赖于一系列的jar包,这些...

    vc++ MFC 属性页封装类

    - 验证功能是确保用户输入有效的关键部分,封装类可能包含了内置的验证机制,如对输入范围的检查。 4. **界面定制**: - 为了适应不同的UI需求,封装类可能提供设置标题、图标、按钮文本等界面元素的方法。 5. *...

    .net平台c#源码属性生成器

    3. 团队协作:确保团队成员使用统一的、与数据库同步的模型类,减少因理解差异产生的错误。 4. 代码一致性:通过自动化工具,保证所有属性的命名、注释和编码风格的一致性,提升代码质量。 四、扩展与优化 1. ...

    VC基于对话框的属性页实现工程

    而属性页则是对话框的一种特殊形式,它允许用户通过一个统一的框架访问和修改多个相关的设置,每个属性页就像一个单独的对话框,但它们共享一个标题栏和导航按钮。 实现基于对话框的属性页,我们需要以下步骤: 1....

    php输入数据统一类实例_.docx

    单例模式通过`get_instance()`方法实现,该方法检查类的静态属性`$_instance`是否已经实例化,如果没有,则创建一个新的实例并返回。 类中定义了私有成员变量,如`$getdata`、`$postdata`、`$requestdata`、`$...

    文件及文件夹属性修改器

    通过运行这个程序,用户可以批量选择文件或文件夹,然后统一更改这些属性,而无需手动逐个设置。这对于管理大量文件或文件夹非常有用,尤其在需要隐藏或保护特定资源时。 使用文件属性修改器的操作流程通常包括以下...

    mapgis中根据参数批量修改属性.docx

    在对话框中,你可以输入或选择需要统一修改的属性信息。这可能包括多个属性字段,只需在对话框中逐一选中你想要修改的字段。例如,你可能要修改某一地区的名称、面积、人口等属性值,只需在相应的字段中填入新的值...

    趣味java版拼写检查器

    在本项目中,可能有一个基础的`SpellChecker`类,定义了通用的检查方法,然后有具体的检查器类(如`DictionaryBasedSpellChecker`)继承自它,并添加自己的特有功能,如加载自定义词典、优化检查算法等。 除此之外...

    基于工业基础类(IFC)标准的城市轨道交通建筑物楼梯规范自动化检查方法.pdf

    然而,BIM技术的进一步应用需要统一的模型格式和属性提取方法,而工业基础类(IFC)标准正是满足这一需求的关键技术。 IFC标准由国际协作联盟组织(IAI,现名BuildingSMART)提出,是一个公开的、结构化的、基于...

    JavaScript对象属性检查、增加、删除、访问操作实例

    本文主要针对JavaScript对象的属性进行深入探讨,涉及属性检查、增加、删除、访问等几个方面。 首先,属性检查通常是为了确定对象是否拥有特定的属性。在JavaScript中,对象属性检查有几种方法,最常用的函数是`...

    AD17批量修改PCB元件字符属性.rar

    3. **数据管理**:利用AD17的数据管理工具,如“设计规则检查”(Design Rule Check, DRC) 和“设计数据库”(Design Data Management),来筛选或查找需要修改的字符属性。 4. **创建脚本**:AD17支持使用脚本来实现...

    SpringBoot接口加密解密统一处理

    这个注解允许我们在控制器类或方法上使用,并通过`value`属性设置是否需要对请求体进行解密,默认值为`true`。 类似地,我们定义`EncryptResponse`注解: ```java @Target({ElementType.METHOD , ElementType.TYPE...

    SCD 文件可视化及检查比较

    4. **六统一检查**:在电力行业,六统一是指“一次设备与二次设备的统一、保护与控制设备的统一、间隔层与站控层的统一、设备命名的统一、设备接口的统一、设备通信协议的统一”。六统一检查是确保变电站自动化系统...

    Synopsys_SVA_OVL检查库应用指南

    它们是基于SystemVerilog的属性和行为语句构建的,可以方便地在验证环境中插入和配置。 2. **全局控制(Global Controls)** 全局控制是影响所有断言的设置,例如,`assertproperty`的超时限制或者全局的严重级别...

    软件需求检查单 软件需求检查单

    - 需求文档的编写风格应统一,避免不同部分出现矛盾。 - 对同一对象的术语和特征描述需一致,无自相矛盾之处。 - 检查是否存在冲突的需求,若存在,需要解决或调整。 4. **可追踪性**: - 需求应有明确的来源,...

    文件文件夹日期属性修改

    5. **检查结果**:修改完成后,检查文件属性确认日期是否已更新。 需要注意的是,随意修改文件日期属性可能会对文件系统的正常运行造成干扰,因此在操作时应谨慎,避免对重要数据造成不可逆的影响。此外,某些系统...

    基于Python的福建省第三轮矿产资源规划县级数据库质量检查方法探究.pdf

    为了解决这些问题,提出了严格采用官方下发的统一数据,使用拓扑规则确保数据的可靠性,以及通过编程语言实现高效的数据检查等应对措施。 总之,通过对福建省第三轮矿产资源规划县级数据库质量检查的研究,我们不仅...

    vb6 批量修改控件属性解决方案

    在VB6(Visual Basic 6)开发环境中,批量修改控件属性是一项常见的需求,尤其是在处理大量窗体或者需要统一界面风格时。标题“vb6 批量修改控件属性解决方案”指的是通过编程的方式,一次性调整多个窗体或控件的...

    JavaBean getset

    - **代码复用和可扩展性**:通过getter和setter,代码可以更易于维护和扩展,因为它们提供了一个统一的接口来操作对象的属性。 3. **示例**: ```java public class User { private String name; private int ...

Global site tag (gtag.js) - Google Analytics