Python之关于类变量的两种赋值区别详解
作者:叫我王员外就行 发布时间:2021-09-08 08:05:26
标签:Python,类变量,赋值
我就废话不多说了,还是直接看代码吧!
# -*- 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 , 在又新增一个本地变量
来源:https://blog.csdn.net/cadi2011/article/details/86438813


猜你喜欢
- 最近JETBRAINS发布了目前最受欢迎的python-web开发框架,可以看到最受欢迎的还是Django和Flask,那么本文就对上榜的1
- 前言一向用Python 3,最近研究微信公众号开发,各云平台只支持Python 2.7,想用其他版本需要自己搭建环境。而网上又搜不到Pyth
- 编者按,网站中让人惊喜的往往是那一点细节,只要用心留意你将发现那些美好的用户体验就在身边。新蛋网想自主控制链接在原窗口还是新窗口中打开?看看
- 游戏介绍在游戏中,魔术师要每位观众心里想一个三位数abc (a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、
- 函数 0. 显示当前时间命令:select now()。作用: 显示当前时间。应用场景: 创建时间,修改时间等默认值。例子:mys
- 本文实例讲述了Python自定义scrapy中间模块避免重复采集的方法。分享给大家供大家参考。具体如下:from scrapy import
- 一、模块概述模块指的是包含python代码的文件,也就是一个.py文件就是一个模块。文件夹(directory)---->包(pack
- 本文实例为大家分享了js实现本地持久化存储登录注册的具体代码,供大家参考,具体内容如下1.登录html文件<!DOCTYPE html
- 动态生成的IFRAME,设置SRC时的,不同位置带来的影响。以下所说的是在IE7下运行的。IE6下也是同样。在这个blog中,直接点击运行代
- 水晶报表分页汇总 建三个公式字段,第一个(公式1)输入下面的公式: whileprintingrecords; global numberv
- 1.Access数据库的DSN-less连接方法: set adocon=Server.Createobject(&q
- 这几天一直在看《Pro JavaScript Techniques》,书中有不少优美、健壮代码,让我不得不惊叹老外对语言这东西的研究程度之深
- 本文为大家分享了Python机器学习之K-Means聚类的实现代码,供大家参考,具体内容如下1.K-Means聚类原理K-means算法是很
- 给明文密码加密的流程:import base64pwd_after_encrypt = base64.b64encode(b'thi
- 利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字。首先需注册获取 API 调用的 ID 和 key,步骤如下:打
- 1、文件和文件组的含义与关系 每个数据库有一个主数据文件.和若干个从文件。文件是数据库的物理体现。 文件组可以包括分布在多个逻辑分区的文件,
- 该组件基于技术栈,主要涉及vue-cli生成的webpack项目脚手架,在此脚手架项目基础上完成的,整合了element-ui开源vue的U
- 开发的时候我都是使用XDebug在本地调试,但是最近加入一些项目中去,环境太复杂了,要在本地搭建一个开发环境真的太麻烦了,那么我们怎么使用x
- 我们在编写 JS 代码时,经常会遇到逻辑判断复杂的情况。一般情况下,可以用 if/else 或 switch 来实现多个条件判断,但会出现一
- 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default C