Python小白学习之如何添加类属性和类方法,修改类私有属性
如何添加类属性和类方法,修改类私有属性
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小白学习之如何添加类属性和类方法,修改类私有属性的更多相关文章
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值
三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...
- python基础学习Day17 面向对象的三大特性之继承、类与对象名称空间小试
一.课前回顾 类:具有相同属性和方法的一类事物 实例化:类名() 过程: 开辟了一块内存空间 执行init方法 封装属性 自动的把self返回给实例化对象的地方 对象:实例 一个实实在在存在的实体 组 ...
- Python小白学习之路(十八)—【内置函数三】
一.对象操作 help() 功能:返回目标对象的帮助信息 举例: print(help(input)) #执行结果 Help on built-in function input in module ...
- Python小白学习之函数装饰器
装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作 ...
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的样式表styleSheet属性
styleSheet属性是定义部件外观的属性样式表,在Qt中styleSheet样式表是类似于html的css样式一样的方法,只是时专门为Qt中的部件开发的.styleSheet的定义语法也是类似CS ...
- Python的类实例方法,类方法,类静态方法
以下面的类定义为例: # coding:utf-8 class A: count = 0 def __init__(self, inst_name): self.inst_name = inst_na ...
- js模块,类,继承,命名空间,私有属性等相关概念梳理
js确切的说是一种基于对象的语言,和纯面向对象的语言(比如as)稍微有点区别,js中没有类的概念.虽然有继承但是基于原型的继承.随着前段越来越受重视,jser们利用js的一些特性他们制造出了和纯面向对 ...
- CSS中不为人知Zoom属性的使用介绍(IE私有属性)
其实Zoom属性是IE浏览器的专有属性,Firefox等浏览器不支持.它可以设置或检索对象的缩放比例.除此之外,它还有其他一些小作用,比如触发ie的hasLayout属性,清除浮动.清除margin的 ...
随机推荐
- Kali-linux使用社会工程学工具包(SET)
社会工程学工具包(SET)是一个开源的.Python驱动的社会工程学渗透测试工具.这套工具包由David Kenned设计,而且已经成为业界部署实施社会工程学攻击的标准.SET利用人们的好奇心.信任. ...
- .net中使用mysql回滚和sqlserver回滚的区别
关于sqlserver事务和mysql事务 首先这是一种方法 public static int GetExecteQuery() { SqlConnection ...
- iostat查看系统的IO负载情况
1.安装iostat工具: [root@localhost ~]# yum -y install sysstat 2.通过命令查看IO情况: %idle如果小于%70的话,说明磁盘的IO负载压力已经很 ...
- LOG算子
原文:http://blog.csdn.net/songzitea/article/details/12851079 背景引言 在博文差分近似图像导数算子之Laplace算子中,我们提到Laplace ...
- uboot 移植 要点
1.第一 首先要 学会 shell 语法 比如 变量的 概念 变量的使用 ,if 语法 ,以及简单 IF 语法(与 或预算),以及 while for 循环 等等语法,才能看得懂 uboot ...
- node.js环境下写的vue项目
github地址:https://github.com/anxizhihai/JournalismProject.git
- TensorFlow简要教程及线性回归算法示例
TensorFlow是谷歌推出的深度学习平台,目前在各大深度学习平台中使用的最广泛. 一.安装命令 pip3 install -U tensorflow --default-timeout=1800 ...
- 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 ...
- 有关集合的foreach循环里的add/remove
转自:Hollis(微信号:hollischuang) 在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 1 .foreach循环 ...
- 在TextBrowser显示中,如何让最新的数据永远出现在第一行或者是在窗口的最后显示信息
这是第一行,但是随着数据的增多,最新的数据就会在末尾显示,然后就看不到了.可以用 main_ui->ReceiveDatatextBrowser->insertPlainText(strD ...