码迷,mamicode.com
首页 > 编程语言 > 详细

python 类的几种方法(函数)

时间:2015-11-11 14:57:26      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:

python中可以定义类,为面向对象语言。

在定义个class时,可以定义3中类型的方法。包括‘实例方法’、“类方法”,“静态方法”其中不同之处:

python类的方法
类型 类访问 实例访问 意义
实例方法 不可以 可以  
类方法 可以 可以  
静态方法 可以 可以  

1,实例方法

  实例方法是最简单的一种方法,定义一个实例方法第一个默认的隐式传参标示调用当前方法的实例:

#encoding:utf-8
#小五
class Person(object):
    def __init__(self,name):
        self.name = name
    def syaHello(self):
        return self.name+! hello!
    def __str__(self):
        return Person name(%s)%self.name
p1 = Person(Bob)
print p1.syaHello() #可以输出Bob! hello!
print Person.syaHello() #报错:unbound method syaHello() must be called with Person instance as first argument (got nothing instead)

 sayHello方法是实例的方法,所以类调用不到。

2,类方法

   用@classmethod 装饰的方法是类方法,用类和实例都能访问到,传入的参数第一个是类,不是实例。所以访问不到实例的属性。


#encoding:utf-8
#小五
class Person(object):
    gender=
    def __init__(self,name):
        self.name = name
    @classmethod
    def sayD(self):
        print self.gender #可以正常输出‘女’
        return self.name #报错:AttributeError: type object ‘Person‘ has no attribute ‘name‘
    def sayHello(self):
        return self.name+! hello!
    def __str__(self):
        return Person name(%s)%self.name
p1 = Person(Bob)
print p1.sayD()

 

 

 

3,静态方法

          用@staticmethod装饰的方法称为静态方法,和前2种的主要区别是第一个参数不是默认,需要调用者传入。和java中的方法一样,可以用作工具方法。

   

#encoding:utf-8
#小五
class Person(object):
    gender=
    def __init__(self,name):
        self.name = name
    @staticmethod
    def sayD(self):
        return self
    def sayHello(self):
        return self.name+! hello!
    def __str__(self):
        return Person name(%s)%self.name
p1 = Person(Bob)
print p1.sayD(sssss) #可以输出sssss
print Person.sayD(aa)  #可以输出aa

 

python 类的几种方法(函数)

标签:

原文地址:http://www.cnblogs.com/-xiaowu/p/4955888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!