preface

include:

  1. getattr
  2. setattr
  3. delattr
  4. hasattr
class webserver(object):
def __init__(self,num):
self.num=num
def stop(self):
print("Stop the server !!") def start(self):
print("Start the server !!") def restart(self):
self.stop()
self.start()
print("Restart the server") def run_test():
print("Reload the server") if __name__ =="__main__":
server=webserver(1)
server2=webserver(1)

hasattr

if hasattr(server,sys.argv[1]):
func=getattr(server,sys.argv[1]) # getattr其实是在server这个实例中寻找和sys.argv[1]这个字符串相同的方法,并且返回一个内存地址
func()

setattr

setattr 是这么玩: setattr(x, 'y', v) is equivalent to ``x.y = v'',意思是第一个输入的是实例的名字,第二个是属性的别名,第三个函数名(类里面已有的方法)

setattr(server,'reload',run_test)
server.reload()

delattr

delattr 是这么玩 delattr(x, 'y') is equivalent to ``del x.y'' ,x是类名,y是类的方法名

delattr(webserver,'start')

此时我们把类的start方法删除后,对象server就没有start方法了,执行下面句的时候就会报错了

server.start()
``` #### 新式类与经典类搜索的优先级
在python2.7 2.6版本内是这样的:
1. 经典类是深度优先
2. 新式类是广度优先
在python3.0 版本是:
1. 不关新式类还是经典类,都是广度优先。 #### 例子: ```
#!/usr/bin/env python
'''
类的继承之深度优先还是广度优先
''' class A:
def f1(self):
print("f1 from A")
def f2(self):
print("f2 from A") class B:
def f1(self):
print("f1 from B")
def f2(self):
print("f2 from B") class C:
def f1(self):
print("f1 from C")
def f2(self):
print("f2 from C") class D(B,C):
pass d=D()
``` 此时D继承了类B,C,那么执行f1方法的时候,首先从同样等级的父类的子类里面,从左往右执行。也就是首先从B里面找f1,f2,
如果B里面没有f1,f2,那么就找C里面的,C里面也没有的话就往C和B的父类往上找,直到找到为止,这就是广度优先
在python2.7 2.6版本内是这样的:
1. 经典类是深度优先
2. 新式类是广度优先 在python3.0 版本是:
不关新式类还是经典类,都是广度优先。

python-反射、新式类与经典类搜索的优先级的更多相关文章

  1. Python新式类与经典类的区别

    1.新式类与经典类 在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性:反之,即不由任意内置类型派生出的类 ...

  2. python中的__new__与__init__,新式类和经典类(2.x)

    在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...

  3. python中新式类和经典类的区别

    1).python在类中的定义在py2-3版本上是使用的有新式类和经典类两种情况,在新式类和经典类的定义中最主要的区别是在定义类的时候是否出现引用object;如:经典类:Class 类名::而新式类 ...

  4. python之继承、抽象类、新式类和经典类

    一.上节补充1.静态属性静态属性 : 类的属性,所有的对象共享这个变量 如果用对象名去修改类的静态属性:在对象的空间中又创建了一个属性,而不能修改类中属性的值 操作静态属性应该用类名来操作 例1:请你 ...

  5. Python 新式类与经典类

    新式类,经典类 查询匹配 广度查询 横着对每个类进行查询 深度查询 无视平级类,直接寻找下级类 #python 3.0 #新式类 广度查询 #经典类 广度查询 #python 2.0 #新式类 广度查 ...

  6. python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。

    单例模式的写法非常多,但常规型的单例模式就是这样写的,各种代码可能略有差异,但核心就是要搞清楚类属性 实例属性,就很容易写出来,原理完全一模一样. 如下: 源码: class A(object): d ...

  7. python中新式类和经典类

    python中的类分为新式类和经典类,具体有什么区别呢?简单的说, 1.新式类都从object继承,经典类不需要. Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Pyth ...

  8. Python新式类和经典类的区别

    @Python新式类和经典类的区别 class ClassicClass(): pass class NewStyleClass(object): pass x1 = ClassicClass() x ...

  9. Python类总结-继承-子类和父类,新式类和经典类

    子类和父类 class Father(object): #子类在使用super调用父类时,Father后面要加object --新式类 def __init__(self): self.Fname = ...

随机推荐

  1. JDBC插入数据超长时无法自动截断问题

    问题 JDBC操作MySQL数据库,当进行插入或更新操作的数据长度超过表字段的声明最大长度时,会报出以下错误,导致不能正常插入: 但是当直接在MySQL客户端操作时,发现确实可以的,只不过会自动对插入 ...

  2. gcc命令中参数c和o混合使用的详解

    gcc -c a.c 编译成目标文件a.o gcc -o a a.o 生成执行文件a.exe gcc a.c 生成执行文件a.exe gcc -o a -c a.c 编译成目标文件a gcc -o a ...

  3. java 集合排序

    Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...

  4. 淘宝开放平台获取沙箱token

    沙箱环境的文档都是错的,直接使用以下地址: 输入淘宝测试账号: sandbox_c_1    密码: taobao1234 https://login.tbsandbox.com/member/log ...

  5. ELK(Logstash+Elasticsearch+Kibana)的原理和详细搭建

    一. Elastic Stack Elastic Stack是ELK的官方称呼,网址:https://www.elastic.co/cn/products ,其作用是“构建在开源基础之上, Elast ...

  6. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql

  7. MVC教程八:母版页(布局页)视图

    一.母版页介绍和使用 母版页的扩展名为".cshtml",也叫做视图布局页,它相当于网页的模板.在其他网页中,只要引用了母版页,母版页的页面内容就可以自动显示出来,设计者可以修改引 ...

  8. Android 开发 打开默认浏览器发生崩溃

    Android 开发 打开默认浏览器发生崩溃. 代码如下: Intent intent = new Intent(); intent.setAction("Android.intent.ac ...

  9. 为已经存在的本地项目添加git,以及从远程仓库拉取代码并切换远程分支

    前提:先去gitlab或github网站上创建一个新项目,完毕后记得添加.ignore: 1.打开终端​,cd到已存在项目的目录 ​​​2.输入以下命令行,初始化一个本地仓库: ​git init 3 ...

  10. ADT安装

    Eclipse安装ADT很简单,直接把下载好的ADT文件解压,覆盖到eclipse目录下的features和plugins目录即可, MyEclipse配置就稍微麻烦了点,我刚开始配置了好几次都不成功 ...