`

统一的类属性检查

 
阅读更多

在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 显示一个统一的窗口,其中包含所有...

    matlab开发-ui检查显示方法属性对象背面

    matlab开发-ui检查显示方法属性对象背面。检查对象句柄(Java/COM/HG);在统一窗口中显示其方法/属性/回调

    vInspector 1.2.27 Unity脚本检查插件unitypackage项目源码C#

    vInspector 1.2.27 Unity脚本检查插件unitypackage项目源码C# 支持Unity版本2020.3.0或更高 脚本检查器的即插即用增强器 - 对变量进行分组,用最少的代码创建按钮 ...- 支持所有内置的统一属性 - 包含源代码

    架构必备 - 多工程属性文件统一管理(创建,替换)Maven插件, 数据来源支持 文件和数据库两种方式.zip

    可以通过输入java -version来检查JDK是否安装以及其版本。 下载Maven。访问Maven官网下载最新版本,例如3.9.1。对于Windows用户,通常下载.zip压缩包;对于其他操作系统,则是.tar.gz文件。 解压Maven。将下载的...

    python3 + macaca,selenium UI 自动化测试框架学习

    编写用例: ./testcase_yaml/ ./testcase_yaml_flow/ 执行用例:运行./testcase_run/test_case_run_all.py 测试报告:./report/ 优点: 1,用例编写简单,方式统一,极容易上手 ...6,支持检查点.text 文本属性的检查

    偷看:全新设计。 在运行时检查您的iOS应用程序

    现在,所有检查器和属性都统一在一个窗口中,从而使检查比以往任何时候都更加简单和快捷。 可折叠组 感到Peek提供的所有信息不知所措? 只需点击标题即可展开/折叠任何部分。 Peek甚至会记住您在发布时的选择! 嵌套...

    PHP 面向对象技术(全面讲解).txt

    它为属于该类的所有对象提供了统一 的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程 序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 LAMP 大讲堂PHP ...

    基础地理信息数据库管理系统.doc

    系统总体按照规范化的信息分类标准和统一的地理空间关系,对各项基础地理空间数 据进行科学存储与管理,实现数据调用,图层顺序、符号自动匹配,快速浏览,图层控 制,查询检索,统计分析以及数据检查更新,制图输出...

    基础地理信息数据库管理系统.pdf

    数据检查应是模板化配置,一次设置后(可调整),自动执行:数 学基础检查,数据完整性检查,数据结构一致性检查,属性值完整性与 正确性检查,名称、编码、图层一致性检查,最小长度面积检查,街边 检查,图形拓扑...

    Unity-SerializableDictionary:Unity的可序列化字典类

    该项目提供了一个通用的字典类及其可解决此问题的自定义属性抽屉。 产品特点 它继承自Dictionary 它实现了CopyFrom(IDictionary)方法来帮助分配常规字典中的值 您可以统一使用任何可序列化的类型作为键或值。 ...

    疯狂JAVA讲义

    学生提问:为什么静态内部类实例方法也不能访问外部类的实例属性呢? 207 学生提问:接口里是否能定义内部接口? 208 6.7.3 使用内部类 208 学生提问:既然内部类是外部类的成员,是否可以为外部类定义子类,在...

    webgl-lint:检查您的WebGL使用情况是否存在常见问题

    检查超出范围的访问问题,并告诉您哪些属性超出范围检查着色器是否已编译。 出现故障时,将打印着色器并尝试突出显示错误。 检查程序链接。 失败时,将打印附加的着色器。 如果出现WebGL错误,它将尝试提供有关原因...

    人事管理系统数据库系统设计

    ③ 当员工的信息发生变动时,修改员工档案记录中相应的属性。 (2)员工职务调动管理 对公司里所有员工的职务记录进行统一编号;登记员工调动前后的具体职务,以及调动时间。 (3)奖惩管理 对公司里所有员工的奖惩...

    北京苍穹城镇地籍与土地利用数据库建设操作手册

    3.2.1地类字典设置 65 3.2.2权属系统设置 65 3.2.3设置管理区、行政区字典、设置村民小组 66 3.3生成分幅信息 67 3.4空间参考信息参数设置 69 3.5数据采集 70 3.5.1行政界线采集 70 3.5.2线状地物采集 72 3.5.3图斑...

    tyr:拉取请求模板状态检查

    Tyr是一个拉取请求状态检查工具,用于根据预设模板维护项目的干净统一的PR格式。 进行实际检查: : 发展 使用命令mvn clean install与Maven一起构建Tyr 创建一个测试存储库-首先,您可以派生 ,其中已经设置了Pull...

    某勾和某无忧网站职位爬取数据(数据清洗之后)

    分为三大类:Java岗、python岗、Go岗 共爬取数据7000~8000条。 经过了数据清洗: 2.数据清洗:检查采集的数据,是否有错误、是否有空值、是否有重复、是否有无关数据比如广告数据等,对数据进行清洗; 3.数据集成:...

    as3比较详尽的工具类

    some.as ---------------------- 遍历并调用对象集属性 move: BasicMove.as ---------------------- 简单的运动方式 mouse: Menu.as ---------------------- 右键菜单 MouseCheck.as --------------------...

Global site tag (gtag.js) - Google Analytics