python类成员和实例成员_python类成员变量和实例成员变量

# 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自然也是改变的;

当实例对象中的类成员修改时,该对象才拥有自己单独的类成员副本,此后再通过类本身改变类成员时,该实例对象的该类成员不会随之改变;

实例变量是在实例对象初始化之后才有的,不能通过类本身调用,所以也不存在通过类本身改变其值,实例成员属于实例本身,同一个类的不同实例对象的实例成员也就自然是各自独立的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值