浅谈python 中的新老类,方法以及函数

在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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值