类的方法
类的方法也分为共有方法和私有方法,私有方法不能被该类之外的函数调用,也不能被外部的类或者方法调用,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) |