Python类定义字类变量与实例变量
学过JAVA或C++等语言的程序员再去学Python类设计时感觉非常不适应,因为Python是在太自由了,让人无所适从,来python定义类时的变量来说,其定义方式、作用域、操作方法都与上述两种语言有更大的可操作空间。
Python类中定义的变量分为类变量和实例变量(也叫成员变量、对象变量),类变量直接定义在类里面(不在函数里面),前面不会有一个self修饰;相反,实例变量大都定义在实例函数里面,通过“self.变量名”的方式进行定义。当然,也有例外,应该类变量和实例变量都可以在类定义之后在定义(这个功能让我目瞪口呆)。
一、类变量及实例变量的定义
先看看正常的:
class Person():person = 'alive' #这是类变量def __init__(self,name ,age):self.name = name #这是实例变量self.age = age #这是实例变量self.gender = '男' #这是实例变量#a = 456 #不能写这里,会出错place = ['地球','中国'] #这是类变量
从上述代码也可以看出,Python定义类时,不对定义类变量与实例变量之间的顺序做出约束,也可以看出类变量不能定义在函数体里面。
再来看看返厂的,也就是在类定义之后在定义变量:
class Student():#创建一个空的类pass#Student s1 = Student() #为p1添加一个name属性 s1.name = 'chb' #这个name属性是一个实例变量 print(s1.name) #输出结果:chb #为Person类添加一个类变量 Student.behavior = 'study' #这是一个类变量 print(Student.behavior)#输出结果:study print(s1.behavior)#输出结果:study
所以说,Python类的定义是很自由的,对于变量,既可以在定义类时定义,也可以在类定义完成之后定义。上述两块代码讲述了类变量和实例变量在定义上面的区别。下面说说类变量与实例变量在使用上的区别。
二、类变量与实力变量的使用
结合上述第一个代码块中定义的Person类进行说明。
1. 类变量可以通过“类名.类变量名”、“实例名.类变量名”两种方式读取,即类和实例都能读取类变量。
if __name__=="__main__":p = Person('chb' , 18)print(Person.person)#输出结果:aliveprint(p.person) #输出结果:alive
2实例变量只能通过“实例名.实例变量名”的方式访问,类无权访问实例名。
if __name__=="__main__":p = Person('chb' , 18)print(p.name)#输出结果:chbprint(Person.name) #错误:AttributeError: type object 'Person' has no attribute 'name'
3. “类名.类变量名”、“实例名.类变量名”访问的实际上是同一个命名空间的变量,所以类变量具有“一改全改”的特点。
if __name__=="__main__":p = Person('chb' , 18)Person.person = 'die'print(p.person)#输出结果:dieprint(Person.person) #输出结果:die
4. 采用‘实例名.类变量名’的方式对类变量进行赋值时,若该类变量是可变数据类型,则可以成功赋值该类变量,否则会在该实例变量所在的名称空间中创建一个与该类变量同名的实例变量进行赋值,并不会对类变量进行赋值,此时也无法再通过‘实例名.类变量名’的方式读取该类变量。但若‘实例名.类变量名’赋值的是可变数据类型,则可以对类变量进行赋值操作。
if __name__=="__main__":p = Person('chb' , 18)p.person = 'die'print(p.person)#输出结果:dieprint(p.__dict__)#输出结果:{'gender': '男', 'person': 'die', 'age': 18, 'name': 'chb'}print(Person.person) #输出结果:alivep.place[1] = '北京'print(p.place)#输出结果:['北京' , '北京']print(Person.place)#输出结果:['北京' , '北京']
Python类定义字类变量与实例变量相关推荐
- python 类变量、实例变量、参数、实例方法、类方法、静态方法 的用法和区别
#!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : 类变量.实例变量.参数.实例方法.类方法 ...
- Python风格总结:Python基础-类变量和实例变量
1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Generally speaking, instance variables are for data u ...
- python 类可以调用实例变量_python中的实例方法、静态方法、类方法、类变量和实例变量浅析...
注:使用的是Python2.7. 一.实例方法 实例方法就是类的实例能够使用的方法.如下: class Foo: def __init__(self, name): self.name = name ...
- python 类可以调用实例变量_python面向对象中类对象、实例对象、类变量、实例变量、类方法、实例方法、静态方法...
1. 类对象和实例对象 Python中一切皆对象,Python类本身也是一种对象,类定义完成后,会在当前作用域中定义一个以类名为名字的命名空间.类对象具有以下两种操作: 可以通过"类名()& ...
- python类定义变量_python类变量与__init__声明变量的区别
类变量:可在类的所有实例之间共享的变量 实例类对象:类的实例是调用类对象来创建的.如:par = Parent(),par就是类Parent的一个实例类对象. 实例变量(成员变量):同一个类对象可以创 ...
- python下,类对象和实例对象区别,类变量和实例变量区别
Y14 一.类对象和实例对象 简短理论: 类对象是将具有相似属性和方法的对象总结抽象为类对象,可以定义相似的一些属性和方法,不同的实例对象去引用类对象的属性和方法,能减少代码的重复率. 实例对象又称实 ...
- 在python中、实例变量在类的内部通过_【python】类变量、实例变量
1.类变量.实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量.通常不使用self.变量名赋值的变量.类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的. 实例变量 ...
- python 实例变量_Python的类变量和实例变量详解
Asuka 什么是类变量? class Student: name = 'Asuka' age = '18' ... 上面定义的name和age就是类变量 什么是实例变量? class Student ...
- Python基础-类变量和实例变量
备忘: Python基础-类变量和实例变量 - 珞樱缤纷 - 博客园 python--类中的self到底有什么作用 - jvincent - 博客园 #深入剖析# Python中 __init__ 函 ...
最新文章
- ERP已死,中台已凉,DDD称王!
- 数字信号处理中卷积的图形化动态解释
- 活动 | 玩转“视”界杯 —— 2018 上半年广告数据分析及短视频分享
- JAVA中深拷贝与浅拷贝(在网上找到的) 希望对于理解深拷贝与浅拷贝有帮助...
- node webkit(nw.js) 设置自动更新
- CC254x--OSAL
- python打包安卓的方法_打包发布Python模块的方法详解
- 【django小练习之主机管理界面】
- 让apache支持ssl
- OCaml已经做好iOS开发准备
- 智能卡检测控制系统检测m1这么操作_多联机制冷剂灌注操作方法
- 修正统计的 5 个方法
- HTML篇三——(1)
- 总结:IP地址、网络地址与子网掩码的理解
- carbon安装win7 thinkpad x1_ThinkPad X1 carbon笔记本Win7重装系统步骤详细教程。 重装系统...
- Canal~1:canal原理
- Crazy Learning for Day 7
- 《用户体验设计 本质、策略与经验》一2 设计师
- android shpe 三角形_在Android中制作三角形按钮
- 《A More Fine-Grained Aspect-Sentiment-Opinion Triplet Extraction Task》论文阅读