python 动态属性
先来看一下一个常见的Python类的定义:
class Person(object):name = Noneage = Nonedef __init__(self,name,age):self.name = nameself.age = ageif __name__=="__main__":p = Person(name='jianglegege',age=16)print(p.name,p.age) # jianglegege 16
来一个需求:
每一个person实例都要有一个sid属性用来记录社保号
写法 1): 直接改Person类
class Person(object):name = Noneage = Nonesid = Nonedef __init__(self,name,age,sid):self.name = nameself.age = ageself.sid = sid
写法 2):创建完实例后单独为实例设置sid属性
class Person(object):name = Noneage = Nonedef __init__(self,name,age):self.name = nameself.age = ageif __name__=="__main__":p = Person(name='jianglegege',age=16)p.sid = '9527'print(p.name,p.age,p.sid)
这两种写法各自的问题:
1、对于第一种写法如果再来一个需求你又要改动Person类的定义、你这个类封闭不了。
2、对于第二种写法要求在创建完成Person实例后都要记得为实例增加一个sid属性、而它和第一种一样在应对新的需求
方面也同样的不灵活
一种灵活的写法:
class Person(object):name = Noneage = Nonedef __init__(self,*args,**kwargs):for k,v in kwargs.items():setattr(self,k,v)if __name__=="__main__":p = Person(name='jianglegege',age=16,sid='9527')print(p.name,p.age,p.sid)
通过上面的写法有两个好处 1):Person类现在直接任意多属性了、2):Person类也被封闭了 ;但是它也有一个不好的地方,比较有在创建p实例的时候没有
传递sid这个值给构造函数,那么p实例就不会有这个属性。
-----
转载于:https://www.cnblogs.com/JiangLe/p/9071012.html
python 动态属性相关推荐
- python动态属性_Python进阶之@property动态属性的实现
Python 动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下. 先看一个简单的例子.创建一个 Student 类,我希望通过实例来获取每个学生的一些 ...
- python 动态属性和特性
文章目录 1. 使用动态属性转换数据 2. @property 2.1 help() 文档 3. 特性工厂函数 4. 属性删除操作 5. 处理属性的重要属性和函数 5.1 处理属性的内置函数 5.2 ...
- python自动监测动态视频_Python自动化检测的动态属性
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下. 先看一个简单的例子. 创建一个Stude ...
- python 属性描述符_Python属性描述符(二)
Python存取属性的方式特别不对等,通过实例读取属性时,通常返回的是实例中定义的属性,但如果实例未曾定义过该属性,就会获取类属性,而为实例的属性赋值时,通常会在实例中创建属性,而不会影响到类本身.这 ...
- 柠檬班自动化学习笔记
列表按照字符串长度排序 保留小数 pycharm乱码问题修改 多行注释 """ 注释 """ 除法取整 // 小数保留几位小数 查看数据的内 ...
- 属性python_Python属性描述符(一)
描述符是对多个属性运用相同存取逻辑的一种方式,,是实现了特性协议的类,这个协议包括了__get__.__set__和__delete__方法.property类实现了完整的描述符协议.通常,可以只实现 ...
- Python类的自定义属性访问及动态属性设置
本文主要介绍python类的一些自定义属性访问的方法,以及类的动态属性设置即python的内置函数setattr(). 自定义属性访问 什么是属性?下面的例子a和b是属性吗?不是,他们是全局变量, ...
- python元编程之使用动态属性实现定制类--特殊方法__setattr__,__getattribute__篇
问题:实现一个类,要求行为如同namedtuple:只存在给定名称的属性,不允许动态添加实例属性. 主要知识点在于: __setattr__,__getattr__,getattribute__,__ ...
- python中ttk详解_Python 中的Property 动态属性和特性详解
在Python开发时,考虑到安全性,我们会通过使用 '__' 定义私有属性,以限制类外或者子类都不能直接进行访问.操作.但同时,这些私有属性并不是一成不变的,所以我们还需要提供私有属性的对外操作方式. ...
最新文章
- 使用JAVA代码实现Android布局(一)RelativeLayout
- Memcached 客户端使用
- EasyExcel导入的时候报错Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/File
- zookeeper集群自动启动-关闭-查询的shell脚本
- atmega8 例程:USART串口通信
- [Think]故事几则
- P1614 爱与愁的心痛(python3实现)
- silverlight 和内嵌页面进行交互的方法
- 95-190-442-源码-window-Trigger-ProcessingTimeTrigger
- jsp 连接sql数据库查询(源代码)
- Selenium之脚本编写页面通用定位方法
- c# html导出excel,C#将HTML导出Excel
- vue 判断是否是微信浏览器
- AndroidStudio使用Git,Commit、Push代码到GitLab权限失败问题
- CentOS7.5部署WeADMIN监控主机交换机配置[详解]
- 计算机win10+上锁,win10系统给电脑屏幕上锁的操作方法
- 解字谜:黑白皆算,对我等众猿而言中央C所在位置数优剃爱肤杠吧爱慕帝贰亿次的值是?...
- 怎么修改云服务器,怎么修改云服务器的登录密码
- 微软服务器分发,从 IIS 服务器分发 Windows 10 应用
- Java实现客户信息管理软件
热门文章
- SAP Kyma组件一览
- 如何从S4HANA的销售订单找到对应的生产订单
- android 缩放透明动画,Android旋转、平移、缩放和透明度渐变的补间动画
- java数据跑不出来,6000条数据,java下跑了20多分钟了还没跑完,求教怎么改进
- vue设置cookie的domain无效_【Vue.js入门到实战教程】16Tailwind 与 Bootstrap 的区别和使用入门...
- 统考计算机2010年版,2010年计算机专业统考试题数据结构
- 项目放到git_Git的基本使用(二)
- thinkphp日志泄漏漏洞_ThinkPHP框架任意代码执行漏洞的利用及其修复方法
- mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
- lumen认证中出现unauthorized._SpringBoot服务整合安全认证Security