Python小白学习之如何添加类属性和类方法,修改类私有属性

如何添加类属性和类方法,修改类私有属性

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()

执行结果:

从上面可以看出我们通过实例修改私有变量,输出结果仍是初始化的状态,并没有改变,但通过调用类方法修改类属性的值却是实现了。

每天努力一点点,今天比昨天更进步。
原文地址:https://www.cnblogs.com/chxb/p/9855886.html