Python是动态语言,动态语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。具体关于动态语言,静态语言,解释语言,编译语言的区别参考博客:编译型语言、解释型语言、静态类型语言、动态类型语言等说法的区别与联系

1.给对象在运行中添加实例属性和类属性

class Book(object):def __init__(self,name,page):self.name = nameself.page = pagedef showInfoself(self):print("book info:{0},{1}".format(self.name,self.page))定义一个普通方法,一个类方法
def bkContent(self):print("this %s's content is ............."%self.name)
@classmethod
def Content(cls):print("this is class methon")1.给对象在运行中添加属性
book1 = Book("平凡的世界",1000)
book1.writer = "路遥" #在程序运行时给对象添加属性,这就是动态给实例绑定属性!
print(book1.name,book1.page,book1.writer) #平凡的世界 1000 路遥2.给类在运行中添加类属性
Book.kinds = "魔幻小说"  #运行时给类添加类属性
book2 = Book("西游记",389)
print(book2.name,book2.page,book2.kinds) #西游记 389 魔幻小说
print(Book.kinds) #魔幻小说

   总结:给运行中对象和运行中类添加属性,直接添加即可: 类名.属性名=属性值,实例名.属性名=属性值

2.给运行中的类添加类方法,静态方法

import typesclass Book(object):def __init__(self,name,page):self.name = nameself.page = pagedef showInfoself(self):print("book info:{0},{1}".format(self.name,self.page))#定义一个个普通方法,注意方法的参数是self.
def bkContent(self):print("this %s's content is ............."%self.name)#定义一个类方法
@classmethod
def C_Content(cls):print("这是类方法")#定义一个静态方法
@staticmethod
def S_Content():print("这是静态方法")#定义一个无参的普通方法
def o_Content():print("这是普通无参方法")1.给对象在运行中添加方法:使用types中的MethodType方法,先导包import types
book3 = Book("小时代",555)
#boo3.bkContent=bkContent 这种方式不行book3.bkContent = types.MethodType(bkContent,book3) #里面的参数是方法名,对象名
book3.bkContent()  #this 小时代's content is .............a = types.MethodType(bkContent,book3)
a()  #this 小时代's content is .............book3.a = types.MethodType(bkContent,book3) #注意前面的引用名,可以自定义,但是与调用名要一致
book3.a()  #this 小时代's content is .............2.给运行中的类进行绑定类方法
Book.C_Content=C_Content
Book.C_Content()  #这是类方法
book4 = Book("红楼梦",1113)
book4.C_Content()  #实例调用类方法:这是类方法3.给运行中类绑定静态方法
book5 = Book("水浒传",222)
Book.S_Content=S_Content
Book.S_Content()  #这是静态方法
book5.C_Content() #这是类方法4.给运行中的类绑定普通方法,会出错,实际也不会这样绑定。
Book.o_Content = o_Content
Book.o_Content()  #没有报错:这是普通无参方法
book6 = Book("一地鸡毛",211)
book6.o_Content()  #报错o_Content() takes 0 positional arguments but 1 was given
#但是对象不能直接调用类绑定的普通方法,因为类中方法都会把对象本身当做参数传给函数。

3.运行的过程中删除属性、方法

  1. del 对象.属性名
  2. delattr(对象, "属性名") 注意属性名用引号引起
import types
class Book(object):country = "china"def __init__(self,name,page):self.name = nameself.page = pagedef showInfoself(self):print("book info:{0},{1}".format(self.name,self.page))def p(self):print("111")#定义一个个普通方法,注意方法的参数是self.
def bkContent(self):print("this %s's content is ............."%self.name)
#定义一个类方法
@classmethod
def C_Content(cls):print("这是类方法")
#定义一个静态方法
@staticmethod
def S_Content():print("这是静态方法")Book.C_Content=C_Content  #给类绑定一个方法
book3 = Book("小时代",555)
book3.bkContent = types.MethodType(bkContent,book3)
del book3.bkContent  #删除绑定的实例方法
#book3.bkContent()  删除后调用失败,成功
#del book3.p  # 删除类自带的方法,报错:AttributeError
book3.C_Content()
#del book3.C_Content  #类绑定的方法也删除不了:AttributeError: C_Contentbook3.price = 13
print(book3.price) #13
delattr(book3,"price")  #删除实例的属性
#print(book3.price) 删除后,调用失败
print(book3.name)
delattr(book3,"name")#可以删除类中带的普通属性
print(book3.country)
delattr(book3,"country") #删除不了类中的类属性

总结:注意:del 和delattr功能有限,都是针对实例对象而言的,对于类方法,类属性则删除不了。因为del和delattr两个方法主要用来删除绑定的实例属性和实例方法。

统一声明:关于原创博客内容,可能会有部分内容参考自互联网,如有原创链接会声明引用;如找不到原创链接,在此声明如有侵权请联系删除哈。关于转载博客,如有原创链接会声明;如找不到原创链接,在此声明如有侵权请联系删除哈。

Python语言的动态性:运行时动态绑定,删除属性和方法相关推荐

  1. Python学习笔记:动态添加与删除属性与方法

    文章目录 一.Python语言特点 1.动态语言 2.动态类型语言 3.强类型语言 二.动态添加属性 1.添加对象属性 2.添加类属性 三.动态删除属性 1.删除实例属性 2.删除类属性 四.动态添加 ...

  2. Python笔记 · Python语言的“动态性”

    尽管对于Python程序员来说已经司空见惯,但是当那些从非动态语言转过来的程序员初次看到形如self.xxx=xxx的语句就是在定义对象属性时往往会感到"离奇":一个未经声明的(类 ...

  3. 在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: ‘文件路径’

    如题,在使用python语言的open函数时,提示错误OSError: [Errno 22] Invalid argument: '文件路径',在查阅了大量资料后也得到了一些解决方案,但是这些解决方案 ...

  4. VB实现可执行文件运行时自删除

    有时,为了实现动态更新,我们需要对正处于运行状态的应用程序进行自删除,就像360安全卫士在线升级那样.但是,Windows是不允许删除正处于运行状态的应用程序的,怎么办?一般来说,我们可以使用两个程序 ...

  5. 学校(School)主要有3大角色:学校(School),讲师(Teacher),学员(Student)。请用Python语言简要实现这些类及及其属性,以及它们之间的关系。

    学校(School)主要有3大角色:学校(School),讲师(Teacher),学员(Student). 学校可以注册学员,统计有多少学员 讲师负责讲课 学生听课,提问,学习,交学费 Teacher ...

  6. python语言编程:itertools.product的简介、使用方法(求笛卡尔积等)之详细攻略

    python语言编程:itertools.product的简介.使用方法(求笛卡尔积等)之详细攻略 目录 itertools的简介 itertools的使用方法 1.求笛卡尔积:根据输入的可遍历对象生 ...

  7. Python语言学习:Python语言学习之正则表达式常用函数之re.search方法【输出仅一个匹配结果(内容+位置)】、re.findall方法【输出所有匹配结果(内容)】案例集合之详细攻略

    Python语言学习:Python语言学习之正则表达式常用函数之re.search方法[输出仅一个匹配结果(内容+位置)].re.findall方法[输出所有匹配结果(内容)]案例集合之详细攻略 导读 ...

  8. Python学习5(生成器、类、属性、方法、私有化、继承、多态)

    生成器 通过列表推导式得到生成器 要创建一个生成器,有很多种方法.第一种方法很简单,只要把一个列表生成式的 [ ] 改成 ( ) In [15]: L = [ x*2 for x in range(5 ...

  9. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

最新文章

  1. Panabit安装测试小结
  2. HTML td 标签的 colspan 属性
  3. spring cloud 概念
  4. 设计模式---命令模式
  5. python----面向对象:1类的定义
  6. 翻译 Windows Server 2016和System Center 2016 技术预览版4 使创新更容易
  7. 信息安全管理体系--建立
  8. 创建与维护MySQL数据库
  9. 组装三代番木瓜基因组——by Serenity Fang
  10. python代码实现进制转换
  11. 程序设计我爱你_如何用爱设计
  12. 小米域名拦截检测API接口
  13. Linux基础 第一节 第三课
  14. Linux基础知识系统学习.NO2——基础字符界面命令
  15. JavaGUI小结——实验做的QQ登录界面
  16. 论国产操作系统的研发及其软件生态系统建设的重要性
  17. 5个海盗博弈(有的是10个海盗,N个海盗)
  18. 数学物理方法专栏目录
  19. 一牛网:MTK芯片资料集锦四(datasheet,规格书,原理图,参考设计,软硬件资料,SDK,技术问题)
  20. div+css静态网页设计——电影售票平台(8页) HTML+CSS+JavaScript 学生DW网页设计作业成品

热门文章

  1. Swift——自定义转场动画(一)
  2. 你是去上大学,别让大学上了你
  3. mac电脑用计算机名共享打印机,MAC与Windows7共享打印机的设置方法
  4. python matplotlib jupyter中绘图使用宋体
  5. [USACO06NOV]玉米田Corn Fields
  6. Java中就什么是映射的简单理解
  7. days05-DSL查询文档以及对搜索结果进行处理
  8. 解决报错Cannot connect to the Maven process. Try again later. If the problem persists, check the Maven
  9. 真正的计算机科学,清华大学“姚半”的创始人,计算机科学界真正的“泰国斗”...
  10. IT内部控制体系建设方案-从IT角度解读《企业内部控制规范》