# python code class Vehicle: def __init__(self,speed): self.speed = speed #speed实例成员变量
def drive(self,distance): print ‘need %f hour(s)’% (distance/self.speed)
class Bike(Vehicle): pass
class Car(Vehicle): test = ‘Car_original’ def __init__(self,speed,fuel): Vehicle.__init__(self,speed) self.fuel = fuel
def drive(self,distance): Vehicle.drive(self,distance) print ‘need %f fuels’%(distance*self.fuel)
b = Bike(16.0) c = Car(120,0.015) b.drive(200.0) c.drive(200.0)
c2 = Car(120,0.015) c3 = Car(120,0.015)
print print ‘情形1: c2中test成员尚未进行过修改,c3中对test进行过修改, car不变’ c3.test = ‘c3_test’ print c2.test print c3.test print Car.test
print print ‘情形2: c2尚未对类成员变量test进行过修改,类car中test成员改变’ Car.test = ‘Car_changed’ print ‘Car test: ‘+Car.test print ‘c2 test: ‘+c2.test print ‘c3 test: ‘+c3.test
print print ‘情形3: c2 c3实例中都对test进行过修改,car中成员test再次改变’ c2.test = ‘c2_test’ Car.test = ‘Car_changed_again’
print ‘Car test: ‘+Car.test print ‘c2 test: ‘+c2.test print ‘c3 test: ‘+c3.test
运行结果: need 12.500000 hour(s) need 1.666667 hour(s) need 3.000000 fuels
情形1: c2中test成员尚未进行过修改,c3中对test进行过修改, car不变 Car_original c3_test Car_original
情形2: c2尚未对类成员变量test进行过修改,类car中test成员改变 Car test: Car_changed c2 test: Car_changed c3 test: c3_test
情形3: c2 c3实例中都对test进行过修改,car中成员test再次改变 Car test: Car_changed_again c2 test: c2_test c3 test: c3_test
分析; test是类变量 speed, fuel是实例变量
一个类的类变量为所有该类型成员共同拥有,可以直接使用类型名访问(
print Car.test),可以使用类型名更改其值(
Car.test = ‘Car_changed’)
定义一个类的多个实例对象后(如c2,c3),类成员test的属性:
实例对象c2定义后尚未修改过类成员(本例中test)之前,c2并没有自己的类成员副本,而是和类本身(class Car)共享,当类Car改变成员test时,c2的成员test自然也是改变的;
当实例对象中的类成员修改时,该对象才拥有自己单独的类成员副本,此后再通过类本身改变类成员时,该实例对象的该类成员不会随之改变;
实例变量是在实例对象初始化之后才有的,不能通过类本身调用,所以也不存在通过类本身改变其值,实例成员属于实例本身,同一个类的不同实例对象的实例成员也就自然是各自独立的。