浅谈python 中的新老类,方法以及函数
2017-07-09 23:48
651 查看
类
在python 中存在两种形式的类:经典类和新式类;为了确保兼容性,在python2版本中,经典类和新式类并存。
而在python3中,所有类都是新式类。
如何显而易见的判断一个类是经典类还是新式类,在于它是否继承了object这个父类。
class old(): def test(self): pass class new(object): def test(self): pass
在上面定义的两个类中,第一个是经典类,第二是新式类。
他们有什么区别呢
a=old() print a print type(a) print dir(a) b=new() print b print type(b) print dir(b)
运行上面的代码
我们可以看到在经典类中实例a 的type 就是一个实例
而实例b 的type 被表示是一个class
同时新式类比经典类多了很多的方法。这是因为新式类继承了object这个父类。
诚然,到这里可能你还不是特别的确切,经典类或者新式类的不同到底有什么卵用。
1.为了与时俱进,推荐使用新式类,毕竟python 2 将逐渐退出舞台。
2.新式类更强大,即使你现在无法体会到,因为你没有使用到。
方法和函数
方法和函数在很长一段时间里,我对着二者的界限很模糊。在一个py文件中,直接通过def定义的就是函数,而在类下面定义的def 我们称之为方法。
def test(): print 'test' class A(object): def foo(self): print 'foo'
以上test()即为函数,foo()叫做方法
print type(test) a=A() a.foo() print type(a.foo)
输出的信息也验证了test是函数,foo是方法。
这里还需要注意类中的类方法和静态方法
class A(object): @classmethod def foo(self): print 'foo' @staticmethod def bar(): print 'bar'
尝试输出
print type(a.foo) print type(a.bar)
你会看到类方法输出的依然是方法。
而静态方法则变成了函数。
这里唯一的区别我想就在于 一个函数有没有继承类。
静态方法,虽然在类内部,但是他不需要继承 self。他的形式与函数并无二致。
而类方法,虽然也可以通过类名直接调用,但参数中必须self.表明继承自类。
这点也许就是他们的区别。
以上的代码你必须手敲一遍,才能理解其含义。just do it
相关文章推荐
- Python: 函数与方法的区别 以及 Bound Method 和 Unbound Method
- python 之浅谈接口的定义和抽象类以及抽象方法
- python双下划线含义、MethodType把函数变为方法以及类继承
- caffe的python接口学习(12):查看属性、方法以及函数参数
- Python: 函数与方法的区别 以及 Bound Method 和 Unbound Method
- python中的divmod()函数以及求二进制的方法
- Python: 函数与方法的区别 以及 Bound Method 和 Unbound Method
- [emacs] Python代码补全的各种方法介绍以及对比
- 【转】 python特殊方法函数
- 浅谈在Delphi中Dll调试方法以及怎样在Dll中使用数据模块DataModule(或表单Form)
- python中函数参数传递的几种方法
- Memcached 安装、使用(Python操作)以及常用方法
- Delphi中用来截取字符的函数,以及使用方法
- python创建子进程,以及读取配置文件方法
- ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
- MSTAR虚函数表(以IBitmap为例),以及快速查找函数实现的方法:FUNCTBL(IBitmap
- 通过Python的内置字符串处理函数来处理字符串的方法和整理
- MmMapIoSpace以及MmUnmapIoSpace,VirtualAlloc和VirtualCopy 函数的实现原理以及实现方法
- python自动补全以及自带脚本运行失败解决方法
- 封装了envi函数的IDL发布程序的执行方法 以及注意事项