PythonTip >> 博文 >> python

python 类的方法

zihua 2014-01-16 18:01:48 点击: 770 | 收藏


python类中的方法:公有方法,私有方法,类方法,静态方法.

下面通过一个实例了解它们之间的区别:

#!/usr/bin/env python
#coding:utf8
class Dave():
    name = "python"

    def fun1(self):               #定义公有方法
        print self.name
        print "i am public method"

    def __fun2(self):             #定义私有方法
        print self.name
        print "i am self method"
先来看公有方法和私有方法,加入以下代码输出
he = Dave()
he.fun1()
root@10.1.6.200:~# ./method.py        直接调用对象公有方法没有问题
python
i am public method
私有方法和私有属性一样是被保护起来,不能直接调用对象的私有方法,但可以间接调用.
#!/usr/bin/env python
#coding:utf8
class Dave():
    name = "python"

    def fun1(self):               #定义公有方法
        print self.name
        print "i am public method"
        self.__fun2()

    def __fun2(self):             #定义私有方法
        print self.name
        print "i am self method"

he = Dave()
he.fun1()

root@10.1.6.200:~# ./method.py 
python
i am public method
python
i am self method


公有属性是可以被类调用,但是公有方法是不可以被类直接调用.需要实例化对象调用.如果想一个方法被类直接调用的话,就需要转换,变成一个类方法.变成类方法有2种,比较简单的可以加装饰器.

    @classmethod
    def classFun(self):           #定义类方法
        print self.name
        print "i am class method"

Dave.classFun()
root@10.1.6.200:~# ./method.py 
python
i am class method
另一个方法比较麻烦,需要定义一个新的函数,以及使用classmethod方法转换函数为类方法.当然调用也需要使用新的该函数名字.
    def classFun(self):           #定义类方法
        print self.name
        print "i am class method"

    classnewFun = classmethod(classFun)


Dave.classnewFun()             #被转换后的是一个类方法,原来classfun还是一个普通方法
root@10.1.6.200:~# ./method.py 
python
i am class method


静态方法在使用中和类方法一样,也是为了让类中直接调用,区别定义时不加self.

    @staticmethod
    def staticFun():              #d定义静态方法
        print Dave.name  #注意不加self,直接打name也不行,会认为调用全局变量,需要使用类型加属性.
        print "i am static method"

Dave.staticFun()
root@10.1.6.200:~# ./method.py 
python
i am static method
同样也可以通过一个函数调用
    def staticfun():              #定义静态方法
        print Dave.name
        print "i am static method"

    staticnewFun = staticmethod(staticFun)

Dave.staticnewFun()
root@10.1.6.200:~# ./method.py 
python
i am static method




原文链接:http://my.oschina.net/davehe/blog/127566

作者:zihua | 分类: python | 标签: python | 阅读: 770 | 发布于: 2014-01-16 18时 |