# 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 '情形1: c2中test成员尚未进行过修改,c3中对test进行过修改, car不变'
c3.test = 'c3_test'
print c2.test
print c3.test
print Car.test
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 '情形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自然也是改变的;当实例对象中的类成员修改时,该对象才拥有自己单独的类成员副本,此后再通过类本身改变类成员时,该实例对象的该类成员不会随之改变;实例变量是在实例对象初始化之后才有的,不能通过类本身调用,所以也不存在通过类本身改变其值,实例成员属于实例本身,同一个类的不同实例对象的实例成员也就自然是各自独立的。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。