#coding=utf-8
#探究类变量和对象变量
class Robot:
'''表示一个带有名字的机器人'''
#一个类变量,用来技术机器人的数量
population=0
def __init__(self,name):
'''初始化数据'''
self.name=name
print ("(Initializing {})".format(self.name))
#当有人被创建时,机器人将会增加人口数量
Robot.population+=1
def die(self):
'''我挂了'''
print ('{} is being destroyed!'.format(self.name))
Robot.population-=1
if Robot.population == 0:
print ('{} was the last one'.format(self.name))
else:
print ('there are still {:d} robots working'.format(Robot.population))
def say_hi(self):
'''来自机器人的诚挚问候
没问题,你做得到'''
print ('Greetings,my master call me {}'.format(self.name))
@classmethod
def how_many(cls):
'''打印出当前人口数量'''
print('we have {:d} robots.'.format(cls.population)) #十进制整数
droid1=Robot("R2-D2")
droid1.say_hi()
Robot.how_many()
print('--------')
droid2=Robot('C-3P0')
droid2.say_hi()
Robot.how_many()
print('--------')
print ('\nRobots can do somework here.\n')
print ("Robots have finished their work.So let's destroy them.")
droid1.die()
droid2.die()
Robot.how_many()
下面我们来探究一下类变量和对象变量是如何在本例中使用的:
在本例中 population 属于 Robot 类,因此它是一个类变量。name 变量属于一个对象(通过self 分配),因此它是一个对象变量
因此,我们通过Robot.population 而非self.population 引用 popuation 类变量。我们对于 name对象变量采用 self.name 标记法加以称呼,这是这个对象中所具有的方法,要记住这个类变量与对象变量之间的简单区别。同时你还要注意 当一个对象变量与一个类变量名称相同时,类变量将会被隐藏 [对象变量优先级高]
网友评论