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在windows和linux下获得本机本地ip地址方法小结
Mar 20 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Windows 安装 Anaconda3+PyCharm的方法步骤
Jun 13 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
python多线程并发实例及其优化
Jun 27 Python
Python for i in range ()用法详解
Sep 18 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
python实现将中文日期转换为数字日期
Jul 14 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
Python函数中的不定长参数相关知识总结
Jun 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
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php密码生成类实例
2014/09/24 PHP
PHP引用的调用方法分析
2016/04/25 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JavaScript中的cacheStorage使用详解
2015/07/29 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
JavaScript简单实现弹出拖拽窗口(二)
2016/06/17 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
node.js +mongdb实现登录功能
2020/06/18 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python连接mongodb集群方法详解
2020/02/13 Python
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
优秀应届毕业生推荐信
2014/02/18 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
理想点亮人生演讲稿
2014/05/21 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
意外事故赔偿协议书
2016/03/22 职场文书