在面向对象程序设计中,程序员可以创建任何新的类型,这些类型描述了每个对象的属性和方法。创建类时,用变量表示属性称为“成员变量”或“成员属性‘’,用函数表示方法称为“成员函数”或“成员方法”,成员属性和成员方法都称为类的成员。
属性(变量)有两种:
实例属性(Java中的“实例变量”)类属性 (Java中的“静态变量”) # -*- coding:UTF-8 -*- class Car: price = 1000 #定义类属性(静态变量) def __init__(self,c): #构造函数 self.color = c #定义实例属性(实例变量) #主程序 car1 = Car("Red") car2 = Car("Blue") print car1.color, Car.price Car.price = 22000 #修改类属性(静态变量) Car.name = 'YLF' #增加一个类属性(静态变量) car1.color = "Yello" #修改实例属性(实例变量) print car1.color, Car.price, Car.name print car2.color, Car.price, Car.name输出
Red 1000 Yello 22000 YLF Blue 22000 YLF居然类实例化后还可以增加一个新的属性(变量)!!!
如果属性名一“__”(双下划线)开头则是私有属性(私有变量),否则就是公有属性(公有变量)。私有属性在类外不能直接访问。Python提供了访问私有属性的方式,可用于程序的测试和调试,访问方法为:
对象名._类名+私有成员名 # -*- coding:UTF-8 -*- class Fruit: def __init__(self): #构造函数 self.__color = 'Red' #私有属性(私有变量)初始化 self.price = 1 #公有属性(公有变量)初始化 #主程序 apple = Fruit() apple.price = 2 print apple.price, apple._Fruit__color #访问公用成员、私有成员 apple._Fruit__color = 'Bule' #修改私有成员 print apple.price, apple._Fruit__color peach = Fruit() #再实例化一个对象 print peach.price, peach._Fruit__color #访问公用成员、私有成员类有3种方法:
公有方法私有方法静态方法公有方法、私有方法都属于对象,每个对象都有自己的公有方法和私有方法;公有方法通过对象名调用,私有方法不能通过对象名调用,只能在属于对象的方法通过self调用;静态方法属于类,静态方法只能通过类名调用,静态方法不能访问属于对象的成员,只能访问属于类的成员。原因很简单,因为通过类名调用静态方法时,并没有对象存在。
# -*- coding:UTF-8 -*- class Fruit: price = 0 #静态属性(静态变量) def __init__(self): #构造函数 self.__color = 'Red' #私有属性(私有变量)初始化 self.__city = 'Kunming' #私有属性(私有变量)初始化 def __outputColor(self): #定义私有方法 print (self.__color) #访问私有属性 def __outputCity(self): #定义私有方法 print (self.__city) #访问私有属性 def output(self): #定义公有方法 self.__outputColor() #调用私有方法 self.__outputCity() #调用私有方法 @staticmethod #静态方法装饰器 def getPrice(): #定义静态方法 return Fruit.price @staticmethod #静态方法装饰器 def setPrice(price): #定义静态方法 Fruit.price = price #主程序 apple = Fruit() apple.output() print (Fruit.getPrice()) Fruit.setPrice(9) print (Fruit.getPrice())输出
Red Kunming 0 9输出
hello world! hello again! hello once more!