Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831270
  • 博文数量: 97
  • 博客积分: 3042
  • 博客等级: 中校
  • 技术积分: 1610
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-21 11:48
文章存档

2015年(1)

2014年(3)

2013年(4)

2012年(43)

2011年(44)

2010年(2)

分类: LINUX

2012-02-10 13:33:53

类的方法
类的方法也分为共有方法和私有方法,私有方法不能被该类之外的函数调用,也不能被外部的类或者方法调用,python使用staticmethod()或者 @staticmethod指令的方法将一般函数转变成静态方法。python的静态方法相当于全局变量
下面演示静态方法和类方法的使用。
class Fruit:
      price = 0
 
      def __init__(self):
          self.__color = "red"
  
      def getColor(self):                      #公有方法,获取__color的属性
          print self.__color
 
      @staticmethod                            #静态方法
      def getPrice():
          print Fruit.price
 
      def __getPrice():                        #私有方法
          Fruit.price = Fruit.price + 10
          print Fruit.price
 
      count = staticmethod(__getPrice)         #强制转换成静态方法 ,第一次输出:10
 
if __name__ == "__main__" :
      apple = Fruit()
      apple.getColor()                          #输出:red
      Fruit.count()                             #输出:10
      banana = Fruit()
      Fruit.count()                             #输出:red
      Fruit.getPrice()                          #输出:10
 
注意:上述代码的getColor()方法中有1个self参数,该参数是用来区别方法和函数的标志,类的方法至少需要一个参数,通常这个特殊的参数被命名为self,self参数表示指向对象本身,self用于区分函数和类的方法,等价于java中的this,当调用Fruit方法里的getColor()方法时,python会把函数的调用转换成getColor(fruit),python自动完成fruit的传递效果。
      python还有一种方法称之为类方法,类方法的作用和静态方法类似,都可以被其他实例对象共享,不同的是类方法必须提供self参数,类方法可以使用classmethod()或者 @classmethod 指令定义。
下面接上例,演示将程序的静态方法改成类方法。
@classmethod
def getPrice(self):
      print self.price
 
def __getPrice(self):
      self.price = self.price + 10
      print self.price
 
count = classmethod(__getPrice)
可见类方法和静态方法是十分相似的,如果某个方法需要被其他实例共享,同时有需要使用当前实例的属性,则将其定义为类方法。
 
内部类的使用
  java中存在类的内部定义类,python中同样也存在,python中内部类的方法有两种调用方法。第一种直接使用外部类调用内部类,生成内部类的实例,在调用内部类的方法,调用的格式:
object_name = outclass_name.inclass_name()
object_name.method()
其中object_name表示内部类的实例。
第二种方法是先对外部类进行实例化,再对内部类进行实例化,最后调用内部类的方法,调用的格式如下:
out_name = outclass_name()
in_name = out_name.inclass_name()
in_name.method()
其中out_name表示外部类的实例,in_name表示内部类的实例。
下面演示内部类的使用:
class Car:
      class Door:
            def open(self):
                 print "open door"
      class While:
            def run(self):
                 print "car run"
 
if __name__ == "__main__":
      car = Car()
      backdoor = car.Door()            #内部类使用方法一
      frontdoor = car.Door()           #内部类使用方法二
      backdoor.open()
      frontdoor.open()
      wheel = Car.Wheel()
      wheel.run()
 
阅读(824) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~