前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python类成员变量和实例成员变量

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

作者头像
用户7886150
修改2020-12-21 11:02:01
修改2020-12-21 11:02:01
1.4K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: 在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自然也是改变的;当实例对象中的类成员修改时,该对象才拥有自己单独的类成员副本,此后再通过类本身改变类成员时,该实例对象的该类成员不会随之改变;实例变量是在实例对象初始化之后才有的,不能通过类本身调用,所以也不存在通过类本身改变其值,实例成员属于实例本身,同一个类的不同实例对象的实例成员也就自然是各自独立的。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档