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

2018-10-26  11:42:24

类属性、定义类方法、类实例化、属性初始化、self参数、类的私有变量的个人学习笔记

直接上实例:

 class player:
def __init__(self,name,hp,occupation):
self.name = name
self.hp = hp
self.occupation = occupation
def print_role(self):
print("%s %s %s"%(self.name,self.hp,self.occupation))
#类实例化
player01 = player('will','','warror')
player02 = player('jine','','mage')
#调用类方法
player01.print_role()
player02.print_role()
  • 第一步:简单介绍一下类,创建一个类名用class + 类名 + 英文冒号。
  • 第二步:def __init__(self,属性名1,属性名2,属性名3.....)是一个构造函数,表示类属性的默认值和属性的初始化,self是类的第一个参数,这个参数是类实例本身,后面若干个类的属性名。
  • 第三步:定义类方法,注意类方法的第一个参数必须是self,也就是类实例本身。这个类方法是打印玩家的属性信息。
  • 第四步:类实例化,把带参数的类复制给一个变量,然后我们就可以通过这个变量进行操作,调用查看实例的类方法和类属性。

打印结果如下:

那么如何添加类属性并修改属性呢:

 #添加类属性
print('****************************************************')
class player:
def __init__(self,name,hp,occupation,power):
self.name = name
self.hp = hp
self.occupation = occupation
self.power = power #给类添加属性
def print_role(self):
print("%s %s %s %s"%(self.name,self.hp,self.occupation,self.power))
def update(self,new_hp):
self.hp = new_hp
player3 = player('tom','','warror','')
player3.print_role() #打印人物初始默认值。
player3.update('') #调用方法,修改类属性(hp血量值)
player3.print_role() #调用打印方法,对比初始,检查hp是否改变
#综上所述,我们通过添加类方法,并在类方法中通过传递新的参数修改已有的属性。当然我们也可以在实例化后修改,不过如果属性若为私有属性,则实例化后修改属性行不通
player3.name = 'Jines' #在实例中,类外面修改类属性也可以,但这种方法仅限于非私有属性
player3.print_role()
print('=======================================================')

第一、从上面源码中,我们可以看出,只需在构造函数中,也就是__init__()函数中,添加形参,并且创建一个新的self.power变量(名字随意,这里只是举例,),并将形参赋值给self.power,然后我们在实例化中,添加对应的实参就可以完成添加一个新的类属性。

第二、如何修改参数,上面代码中提供了两种方法,一种是在类中,通过定义新方法修改,另一种是在实例化后,修改实例的属性。这两种方法都可以实现修改类属性。

执行结果:

从上面可以看出,两种方法都可以修改类的属性。

但是,如果类的属性是私有属性,那通过修改实例化后的属性就无法实现修改属性了。但另一种方法通过定义一个新的方法,在新的的方法中修改私有变量是可以实现的。

源码如下:

 #私有属性,只要在属性前面加双下划线__
class player:
def __init__(self,name,hp,occupation,power):
self.__name = name
self.hp = hp
self.occupation = occupation
self.power = power #给类添加属性
def print_role(self):
print("%s %s %s %s"%(self.__name,self.hp,self.occupation,self.power))
def update(self,new_name):
self.__name = new_name
player4 = player('tom','','warror','')
player4.print_role()
player4.name = 'Pole'
player4.print_role() #通过类型外修改类私有属性,很明显不可以,只有通过类方法修改类属性
print('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$')
player4.update('Machel') #通过输出结果可见,成功修改了私有变量,注意一点,私有变量修改,类中所有要修私有属性的self.attribute应对应改成self.__attribute
player4.print_role()

执行结果:

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

Python小白学习之如何添加类属性和类方法,修改类私有属性的更多相关文章

  1. python类属性和类方法(类的结构、实例属性、静态方法)

    类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...

  2. python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值

    三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...

  3. python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试

    一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...

  4. Python小白学习之路(十八)—【内置函数三】

    一.对象操作 help() 功能:返回目标对象的帮助信息 举例: print(help(input)) #执行结果 Help on built-in function input in module ...

  5. Python小白学习之函数装饰器

    装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作 ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中部件的样式表styleSheet属性

    styleSheet属性是定义部件外观的属性样式表,在Qt中styleSheet样式表是类似于html的css样式一样的方法,只是时专门为Qt中的部件开发的.styleSheet的定义语法也是类似CS ...

  7. Python的类实例方法,类方法,类静态方法

    以下面的类定义为例: # coding:utf-8 class A: count = 0 def __init__(self, inst_name): self.inst_name = inst_na ...

  8. js模块,类,继承,命名空间,私有属性等相关概念梳理

    js确切的说是一种基于对象的语言,和纯面向对象的语言(比如as)稍微有点区别,js中没有类的概念.虽然有继承但是基于原型的继承.随着前段越来越受重视,jser们利用js的一些特性他们制造出了和纯面向对 ...

  9. CSS中不为人知Zoom属性的使用介绍(IE私有属性)

    其实Zoom属性是IE浏览器的专有属性,Firefox等浏览器不支持.它可以设置或检索对象的缩放比例.除此之外,它还有其他一些小作用,比如触发ie的hasLayout属性,清除浮动.清除margin的 ...

随机推荐

  1. Kali-linux使用社会工程学工具包(SET)

    社会工程学工具包(SET)是一个开源的.Python驱动的社会工程学渗透测试工具.这套工具包由David Kenned设计,而且已经成为业界部署实施社会工程学攻击的标准.SET利用人们的好奇心.信任. ...

  2. .net中使用mysql回滚和sqlserver回滚的区别

    关于sqlserver事务和mysql事务 首先这是一种方法 public static int GetExecteQuery()        {            SqlConnection ...

  3. iostat查看系统的IO负载情况

    1.安装iostat工具: [root@localhost ~]# yum -y install sysstat 2.通过命令查看IO情况: %idle如果小于%70的话,说明磁盘的IO负载压力已经很 ...

  4. LOG算子

    原文:http://blog.csdn.net/songzitea/article/details/12851079 背景引言 在博文差分近似图像导数算子之Laplace算子中,我们提到Laplace ...

  5. uboot 移植 要点

    1.第一 首先要  学会 shell 语法   比如 变量的 概念 变量的使用 ,if 语法  ,以及简单 IF 语法(与 或预算),以及  while for 循环 等等语法,才能看得懂 uboot ...

  6. node.js环境下写的vue项目

    github地址:https://github.com/anxizhihai/JournalismProject.git

  7. TensorFlow简要教程及线性回归算法示例

    TensorFlow是谷歌推出的深度学习平台,目前在各大深度学习平台中使用的最广泛. 一.安装命令 pip3 install -U tensorflow --default-timeout=1800 ...

  8. java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'

    java.lang.IllegalStateException: Failed to load property source from location 'classpath:/applicatio ...

  9. 有关集合的foreach循环里的add/remove

    转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...

  10. 在TextBrowser显示中,如何让最新的数据永远出现在第一行或者是在窗口的最后显示信息

    这是第一行,但是随着数据的增多,最新的数据就会在末尾显示,然后就看不到了.可以用 main_ui->ReceiveDatatextBrowser->insertPlainText(strD ...