Python之关于类变量的两种赋值区别详解


Posted in Python onMarch 12, 2020

我就废话不多说了,还是直接看代码吧!

# -*- coding:utf-8 -*-
#面试题,写一个方法,将一行字符串中所有的单词数量统计出来
 
class Person(object):
 TAG = "hello"
 
p1 = Person()
p2 = Person()
 
print p1.TAG #第一种赋值方式
print p2.TAG
print Person.TAG #第二种赋值方式
 
p1.TAG = "damn it"
 
print p1.TAG
print p2.TAG
print Person.TAG

输出结果:可以看到,只有p1的TAG,被赋值成了新的"damn it"

hello
hello
hello
damn it
hello
hello

如何将所有对象引用的类变量都赋值成同一个值呢?

Person.TAG = "damn it"

输出结果:完美解决问题

hello
hello
hello
damn it
damn it
damn it

补充知识:python类,赋值,命名空间

python中的类相当于一个命名空间,object.attr 就是一个向上爬属性的过程

属性:__dict__ , __class__ , __bases__

__dict__: 实例或类或模块的属性 , __class__ 实例对应的类对象,__bases__(元组):父类/超类

爬属性:

def findAttr(obj , attr):
 if attr in obj.__dict__:
  return obj.__dict__[attr]
 cls = obj.__class__
 if attr in cls.__dict__:
  return cls.__dict__[attr]
 for super_cls in cls.__bases__:
  if attr in super_cls.__dict__:
   return super_cls.__dict__[attr]
 return None

爬类:

def classTree(cls,indent):
 print('.'*indent + cls.__name__)
 for super_cls in cls.__bases__:
  classTree(super_cls,indent+4)

赋值方式:

class Test:
 static_var = 1 #类属性相当与C++静态成员变量
 def assign(self):
  self.x = 1 #对象属性赋值
 
t = Test()
t.x = 2 #也可以这样 ,直接赋值
t.__dict__['x'] = 3 #也可以这样 , __dict__是对象空间词典,每个对象一份,类对象/模块也有
Test.add_static_var = 5 #也可以样新增一个类属性

类方法调用 , 常用的方式object.method() ,在python中扩展 Class.method(object) ,两者相同

Test.assign(t)
print(t.x)

当object.method() 时,object被传入method(self)中的第一个参数.Class.method(object) 需要手动传入

命名空间:

x = 0
def print_global():
 print(x) #打印全局
def print_local():
 x = 1
 print(x) #本地变量
class A:
 x = 2 #类属性==C++静态成员变量 , print A.x
 def m(self):
  x = 3   #本地变量
  self.x = 4 #对象属性
def change_global():
 global x  #修改全局变量,否则x = 100 ,是增加一个本地变量
 x = 100
def print_enclosing():
 x = 200
 def nested():
  print(x)  #在闭包中引用本地变量
def change_in_enclosing():
 x = 1
 def nested():
  nonlocal x
  x = 2   #在闭包中改变本地变量, 如没有nonlocal x , 在又新增一个本地变量

以上这篇Python之关于类变量的两种赋值区别详解别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python函数返回多个值的示例方法
Dec 04 Python
python通过文件头判断文件类型
Oct 30 Python
TensorFlow实现随机训练和批量训练的方法
Apr 28 Python
对python中if语句的真假判断实例详解
Feb 18 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
python装饰器常见使用方法分析
Jun 26 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
python之array赋值技巧分享
Nov 28 Python
Django之form组件自动校验数据实现
Jan 14 Python
Python如何访问字符串中的值
Feb 09 Python
Python range与enumerate函数区别解析
Feb 28 Python
pytorch 如何使用float64训练
May 24 Python
浅谈python3 构造函数和析构函数
Mar 12 #Python
Python基于yield遍历多个可迭代对象
Mar 12 #Python
Python通过4种方式实现进程数据通信
Mar 12 #Python
Python多进程编程multiprocessing代码实例
Mar 12 #Python
Python多线程多进程实例对比解析
Mar 12 #Python
Python线程协作threading.Condition实现过程解析
Mar 12 #Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 #Python
You might like
中东人咖啡哲学
2021/03/03 咖啡文化
php5 pdo新改动加载注意事项
2008/09/11 PHP
php Undefined index的问题
2009/06/01 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
2011/12/19 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
jquery移动节点实例
2015/01/14 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
js实现分页功能
2017/05/24 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Python实现AES加密,解密的两种方法
2020/10/03 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
自荐信模版
2013/10/24 职场文书
大学生求职自我评价
2014/01/16 职场文书
国际贸易求职信
2014/07/05 职场文书
高中家长意见怎么写
2015/06/03 职场文书
单位病假条范文
2015/08/17 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python