先来看一下一个常见的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 动态属性相关推荐

  1. python动态属性_Python进阶之@property动态属性的实现

    Python 动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下. 先看一个简单的例子.创建一个 Student 类,我希望通过实例来获取每个学生的一些 ...

  2. python 动态属性和特性

    文章目录 1. 使用动态属性转换数据 2. @property 2.1 help() 文档 3. 特性工厂函数 4. 属性删除操作 5. 处理属性的重要属性和函数 5.1 处理属性的内置函数 5.2 ...

  3. python自动监测动态视频_Python自动化检测的动态属性

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Python动态属性的概念可能会被面试问到,在项目当中也非常实用,但是在一般的编程教程中不会提到,可以进修一下. 先看一个简单的例子. 创建一个Stude ...

  4. python 属性描述符_Python属性描述符(二)

    Python存取属性的方式特别不对等,通过实例读取属性时,通常返回的是实例中定义的属性,但如果实例未曾定义过该属性,就会获取类属性,而为实例的属性赋值时,通常会在实例中创建属性,而不会影响到类本身.这 ...

  5. 柠檬班自动化学习笔记

    列表按照字符串长度排序 保留小数 pycharm乱码问题修改 多行注释 """ 注释 """ 除法取整 // 小数保留几位小数 查看数据的内 ...

  6. 属性python_Python属性描述符(一)

    描述符是对多个属性运用相同存取逻辑的一种方式,,是实现了特性协议的类,这个协议包括了__get__.__set__和__delete__方法.property类实现了完整的描述符协议.通常,可以只实现 ...

  7. Python类的自定义属性访问及动态属性设置

    本文主要介绍python类的一些自定义属性访问的方法,以及类的动态属性设置即python的内置函数setattr(). 自定义属性访问 ​ 什么是属性?下面的例子a和b是属性吗?不是,他们是全局变量, ...

  8. python元编程之使用动态属性实现定制类--特殊方法__setattr__,__getattribute__篇

    问题:实现一个类,要求行为如同namedtuple:只存在给定名称的属性,不允许动态添加实例属性. 主要知识点在于: __setattr__,__getattr__,getattribute__,__ ...

  9. python中ttk详解_Python 中的Property 动态属性和特性详解

    在Python开发时,考虑到安全性,我们会通过使用 '__' 定义私有属性,以限制类外或者子类都不能直接进行访问.操作.但同时,这些私有属性并不是一成不变的,所以我们还需要提供私有属性的对外操作方式. ...

最新文章

  1. 使用JAVA代码实现Android布局(一)RelativeLayout
  2. Memcached 客户端使用
  3. EasyExcel导入的时候报错Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/File
  4. zookeeper集群自动启动-关闭-查询的shell脚本
  5. atmega8 例程:USART串口通信
  6. [Think]故事几则
  7. P1614 爱与愁的心痛(python3实现)
  8. silverlight 和内嵌页面进行交互的方法
  9. 95-190-442-源码-window-Trigger-ProcessingTimeTrigger
  10. jsp 连接sql数据库查询(源代码)
  11. Selenium之脚本编写页面通用定位方法
  12. c# html导出excel,C#将HTML导出Excel
  13. vue 判断是否是微信浏览器
  14. AndroidStudio使用Git,Commit、Push代码到GitLab权限失败问题
  15. CentOS7.5部署WeADMIN监控主机交换机配置[详解]
  16. 计算机win10+上锁,win10系统给电脑屏幕上锁的操作方法
  17. 解字谜:黑白皆算,对我等众猿而言中央C所在位置数优剃爱肤杠吧爱慕帝贰亿次的值是?...
  18. 怎么修改云服务器,怎么修改云服务器的登录密码
  19. 微软服务器分发,从 IIS 服务器分发 Windows 10 应用
  20. Java实现客户信息管理软件

热门文章

  1. SAP Kyma组件一览
  2. 如何从S4HANA的销售订单找到对应的生产订单
  3. android 缩放透明动画,Android旋转、平移、缩放和透明度渐变的补间动画
  4. java数据跑不出来,6000条数据,java下跑了20多分钟了还没跑完,求教怎么改进
  5. vue设置cookie的domain无效_【Vue.js入门到实战教程】16Tailwind 与 Bootstrap 的区别和使用入门...
  6. 统考计算机2010年版,2010年计算机专业统考试题数据结构
  7. 项目放到git_Git的基本使用(二)
  8. thinkphp日志泄漏漏洞_ThinkPHP框架任意代码执行漏洞的利用及其修复方法
  9. mysql order by sql注入_mybatis中#{}和${}的区别及order by的sql注入问题
  10. lumen认证中出现unauthorized._SpringBoot服务整合安全认证Security