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 ip正则式
May 07 Python
用Python写的图片蜘蛛人代码
Aug 27 Python
Python多线程实例教程
Sep 06 Python
Python中的面向对象编程详解(上)
Apr 13 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
Python实现最大子序和的方法示例
Jul 05 Python
python中class的定义及使用教程
Sep 18 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
详解python爬取弹幕与数据分析
Nov 14 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获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
Vue自定义指令结合阿里云OSS优化图片的实现方法
2019/11/12 Javascript
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
python使用xmlrpc实例讲解
2013/12/17 Python
Python单例模式实例详解
2017/03/01 Python
python 堆和优先队列的使用详解
2019/03/05 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
Django 配置多站点多域名的实现步骤
2019/05/17 Python
python3实现微型的web服务器
2019/09/03 Python
Python生成词云的实现代码
2020/01/14 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
CSS3不透明度实例讲解
2016/04/26 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
双十佳事迹材料
2014/01/29 职场文书
社区食品安全实施方案
2014/03/28 职场文书
初中班主任评语大全
2014/04/24 职场文书
个人课题方案
2014/05/08 职场文书
经典演讲稿汇总
2014/05/19 职场文书
优质护理心得体会
2016/01/22 职场文书