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解析中国天气网的天气数据
Mar 21 Python
Django中使用group_by的方法
May 26 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
使用Python从零开始撸一个区块链
Mar 14 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
详解Python3中的 input() 函数
Mar 18 Python
python 画条形图(柱状图)实例
Apr 24 Python
python实点云分割k-means(sklearn)详解
May 28 Python
pytorch中的weight-initilzation用法
Jun 24 Python
Python根据字符串调用函数过程解析
Nov 05 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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
PHP 数字左侧自动补0
2008/03/31 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
关于PHP结束标签的使用细节探讨及联想
2013/03/04 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
[58:57]2018DOTA2亚洲邀请赛3月29日小组赛B组 Effect VS VGJ.T
2018/03/30 DOTA
python 获取文件列表(或是目录例表)
2009/03/25 Python
Python线性方程组求解运算示例
2018/01/17 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
基于python操作ES实例详解
2019/11/16 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
人事专员岗位职责
2013/11/20 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
领导干部失职检讨书
2015/05/05 职场文书
《叶问2》观后感
2015/06/15 职场文书
创业计划书之面包店
2019/09/17 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Mysql中where与on的区别及何时使用详析
2021/08/04 MySQL