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. Android 底部按钮BottomNavigationView + Fragment + viewPager 的使用(一)

    实现的效果,左右滑动,底部栏跟着滑动,中间加的是分帧的页面        上代码:主页面activity_main.xml <?xml version="1.0" encod ...

  2. Spark Streaming 执行流程

    Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流. 本节描述了Spark Strea ...

  3. jQuery.fly插件实现添加购物车抛物线效果

    样例 使用电商 APP 购买商品时,很多都有上图的红色小球抛物线效果,下面通过 jQuery.fly 插件来实现一个简单 Demo. 实现 简单思路: 确定抛物线的起始和终止位置: 通过 js 在起始 ...

  4. JavaScript JSON 数据处理

    在JavaScript 也自带了 JSON 格式的处理 <!doctype html> <html> <script> var test_json_str = { ...

  5. win10 tensorflow python3*,Multiprocessing using fit_generator(pickle_safe=True) fail问题解决

    由于WIN版本的tensorflow使用 fit_generator时候,出现错误,但是mac 不会出现, 所以的解决方法就是https://github.com/fchollet/keras/iss ...

  6. Selenium (1) —— Selenium安装与测试(101 Tutorial)

    Selenium (1) -- Selenium安装与测试(101 Tutorial) jvm版本: 1.8.0_65 selenium版本: v2.48.0 (Standalone Selenium ...

  7. openCV—Python(5)—— 图像几何变换

    一.函数简单介绍 1.warpAffine-图像放射变换(平移.旋转.缩放) 函数原型:warpAffine(src, M, dsize, dst=None, flags=None, borderMo ...

  8. 常用css3技巧

    H5移动前端开发常用高能css3汇总   1.禁止a标签点击高亮,这些都是非官方属性,但实用性超强   html,body{ -webkit-touch-callout: none; //禁止或显示系 ...

  9. Ubuntu16.04怎么将桌面左侧的启动器移动到屏幕底部

    与其他 Linux 发行版不同,Ubuntu 多年来一直使用 Unity 做桌面环境,该环境的最突出特点就是桌面左侧有一个启动器栏(Launcher).从 16.04 版本开始,Ubuntu 提供了一 ...

  10. Sublime运行Matlab

    使用Sublime来作为Matlab的编辑器.Sublime编辑+Matlab命令行(terminal)运行的开发环境搭建. 前期准备 Matlab 2014a (Windows或Linux平台,这里 ...