如何添加类属性和类方法,修改类私有属性
2018-10-26 11:42:24
类属性、定义类方法、类实例化、属性初始化、self参数、类的私有变量的个人学习笔记
直接上实例:
1 class player: 2 def __init__(self,name,hp,occupation): 3 self.name = name 4 self.hp = hp 5 self.occupation = occupation 6 def print_role(self): 7 print("%s %s %s"%(self.name,self.hp,self.occupation)) 8 #类实例化 9 player01 = player('will','2000','warror') 10 player02 = player('jine','2500','mage') 11 #调用类方法 12 player01.print_role() 13 player02.print_role()
- 第一步:简单介绍一下类,创建一个类名用class + 类名 + 英文冒号。
- 第二步:def __init__(self,属性名1,属性名2,属性名3.....)是一个构造函数,表示类属性的默认值和属性的初始化,self是类的第一个参数,这个参数是类实例本身,后面若干个类的属性名。
- 第三步:定义类方法,注意类方法的第一个参数必须是self,也就是类实例本身。这个类方法是打印玩家的属性信息。
- 第四步:类实例化,把带参数的类复制给一个变量,然后我们就可以通过这个变量进行操作,调用查看实例的类方法和类属性。
打印结果如下:
那么如何添加类属性并修改属性呢:
1 #添加类属性 2 print('****************************************************') 3 class player: 4 def __init__(self,name,hp,occupation,power): 5 self.name = name 6 self.hp = hp 7 self.occupation = occupation 8 self.power = power #给类添加属性 9 def print_role(self): 10 print("%s %s %s %s"%(self.name,self.hp,self.occupation,self.power)) 11 def update(self,new_hp): 12 self.hp = new_hp 13 player3 = player('tom','3000','warror','150') 14 player3.print_role() #打印人物初始默认值。 15 player3.update('1000') #调用方法,修改类属性(hp血量值) 16 player3.print_role() #调用打印方法,对比初始,检查hp是否改变 17 #综上所述,我们通过添加类方法,并在类方法中通过传递新的参数修改已有的属性。当然我们也可以在实例化后修改,不过如果属性若为私有属性,则实例化后修改属性行不通 18 player3.name = 'Jines' #在实例中,类外面修改类属性也可以,但这种方法仅限于非私有属性 19 player3.print_role() 20 print('=======================================================')
第一、从上面源码中,我们可以看出,只需在构造函数中,也就是__init__()函数中,添加形参,并且创建一个新的self.power变量(名字随意,这里只是举例,),并将形参赋值给self.power,然后我们在实例化中,添加对应的实参就可以完成添加一个新的类属性。
第二、如何修改参数,上面代码中提供了两种方法,一种是在类中,通过定义新方法修改,另一种是在实例化后,修改实例的属性。这两种方法都可以实现修改类属性。
执行结果:
从上面可以看出,两种方法都可以修改类的属性。
但是,如果类的属性是私有属性,那通过修改实例化后的属性就无法实现修改属性了。但另一种方法通过定义一个新的方法,在新的的方法中修改私有变量是可以实现的。
源码如下:
1 #私有属性,只要在属性前面加双下划线__ 2 class player: 3 def __init__(self,name,hp,occupation,power): 4 self.__name = name 5 self.hp = hp 6 self.occupation = occupation 7 self.power = power #给类添加属性 8 def print_role(self): 9 print("%s %s %s %s"%(self.__name,self.hp,self.occupation,self.power)) 10 def update(self,new_name): 11 self.__name = new_name 12 player4 = player('tom','3000','warror','150') 13 player4.print_role() 14 player4.name = 'Pole' 15 player4.print_role() #通过类型外修改类私有属性,很明显不可以,只有通过类方法修改类属性 16 print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$') 17 player4.update('Machel') #通过输出结果可见,成功修改了私有变量,注意一点,私有变量修改,类中所有要修私有属性的self.attribute应对应改成self.__attribute 18 player4.print_role()
执行结果:
从上面可以看出我们通过实例修改私有变量,输出结果仍是初始化的状态,并没有改变,但通过调用类方法修改类属性的值却是实现了。