zoukankan      html  css  js  c++  java
  • 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()

    执行结果:

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

    每天努力一点点,今天比昨天更进步。
  • 相关阅读:
    把git项目放到个人服务器上
    关于fcitx无法切换输入法的问题解决
    博客变迁通知
    (欧拉回路 并查集 别犯傻逼的错了) 7:欧拉回路 OpenJudge 数据结构与算法MOOC / 第七章 图 练习题(Excercise for chapter7 graphs)
    (并查集) HDU 1856 More is better
    (并查集 不太会) HDU 1272 小希的迷宫
    (并查集 注意别再犯傻逼的错了) HDU 1213 How Many Tables
    (最小生成树 Kruskal算法) 51nod 1212 无向图最小生成树
    (并查集) HDU 1232 畅通工程
    (最小生成树 Prim) HDU 1233 还是畅通工程
  • 原文地址:https://www.cnblogs.com/chxb/p/9855886.html
Copyright © 2011-2022 走看看