Python类变量,实例变量,类方法,实例方法,静态方法的分析
Python作为动态语言,跟静态语言如c/c++有很大区别,其中的一个重要的特性就是Python的变量无需声明直接可用。同样,类的成员变量无需声明,直接可用。目的是为了动态语言跟灵活,在思路想到的时候能及时添加成员,而无需在回到类声明的地方,添加成员。但是,同为动态语言,类的成员变量和实例成员变量,生命周期有很大的区别,我们以一个简单的小例子说明:
class student(object): '''我们声明一个学生类,希望它有‘姓名’和‘性别’两个属性'''
sex = 'male' '''其中’性别‘这个属性,我们在类中赋值 '''
def __init__(self, name): '''其中‘姓名’这个属性,我们动态赋值,注意观察name属性合适创建
self._name = name stu = student('zhang') print(dir(stu)) '''我们用Python内置函数dir()查看类的所有属性,方法'''
print(dir(student)) '''我们用Python内置函数dir()查看实例的所有属性,方法'''
我们打开pycharm的监视窗口,分别观察类student的成员,和实例stu的成员变量,如下图:

通过观察我们发现,实例stu包含2个我们创建的成员,name和sex,这说明实例的属性,不需要声明,在需要用的时候赋值就可以(按照c/c++的思路,student类没有name成员,而Python的理想是,需要用name成员时,直接赋值)
这正是Python动态语言的特性,变量无需声明,应为,Python是解释语言,边解释边创建变量。
通过观察我们发现,类student只有sex成员,没有name成员,这也是动态语言的特性,应为类本质也是个对象(Python一切皆对象),执行类的时候,只声明,不执行__init()__,什么时候执行初始化函数呢?当我们实例一个对象的时候,这说明,动态创建类属性只属于对象,不属于类自己。我们在最后的dir()内置函数输出中再次验证:

总结:Python是动态语言,类的成员变量无需声明,想到即用,但是,要区分类的属性和实例的属性,动态添加的属性只属于某个实例,不属于类。
另外,对应类变量和实例变量的是:类的三种方法,类方法,实例方法,静态方法。
至于区别,类方法,在声明类可用,实例也可用,但是实例方法只能在实例了一个类之后,才能使用实例方法。
动态给实例绑定方法,得到实例方法,但是该方法只属于实例,不属于类,所以对其他实例不起作用,所以我们开始思考python是否支持,给类绑定方法,确实支持。
利用 __slot__ 可以指定哪些属性可以绑定,那些属性不能绑定
Python类变量,实例变量,类方法,实例方法,静态方法的分析的更多相关文章
- Python 类变量 实例变量
类变量: 是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的).例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例. 实例变量: 实例 ...
- python学习笔记(二十二)实例变量、实例方法、类变量、类方法、属性方法、静态方法
实例变量:在类的声明中,属性是用变量来表示的.这种变量就称为实例变量,也就是成员变量. 实例方法:在类中声明的方法,例如:my(self),必须实例化之后才可以使用,否则会报错. 类变量:公共的变量, ...
- python实例、类方法、静态方法
[python实例.类方法.静态方法] 参考:http://blog.163.com/yang_jianli/blog/static/161990006201122411586729/
- 第8.28节 Python中使用__setattr__定义实例变量和实例方法
一. 引言 根据前面章节介绍的内容,我们知道实例变量.实例方法的定义可以通过以下方法进行: 在类体中直接定义实例变量.实例方法: 在实例方法中定义实例变量.实例方法: 在类体外调用方使用赋值语句赋值定 ...
- Python staticmethod classmethod 普通方法 类变量 实例变量 cls self 概念与区别
类变量 1.需要在一个类的各个对象间交互,即需要一个数据对象为整个类而非某个对象服务. 2.同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见. 3.有独立的存储区,属于整个类. ...
- Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法
一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...
- Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)
总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...
- 『无为则无心』Python面向对象 — 58、类方法和静态方法
目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...
- 第7.11节 案例详解:Python类实例变量
上节老猿介绍了实例变量的访问方法,本节结合一个具体案例详细介绍实例变量访问. 本节定义一个Vehicle类(车),它有三个实例变量self.wheelcount(轮子数).self.power(动力) ...
- python_94_类变量实例变量
class Role: n=123#类变量 name='我是类name' list=[] def __init__(self,name,role,weapon,life_value=100,money ...
随机推荐
- (2.7)Mysql之SQL基础——表的操作与查看
(2.7)Mysql之SQL基础——表的操作与查看 搜索关键字:mysql表操作,comment注释操作,mysql临时表 0.临时表 create temporary table 1.创建表(在in ...
- 1.如何在虚拟机ubuntu上安装hadoop多节点分布式集群
要想深入的学习hadoop数据分析技术,首要的任务是必须要将hadoop集群环境搭建起来,可以将hadoop简化地想象成一个小软件,通过在各个物理节点上安装这个小软件,然后将其运行起来,就是一个had ...
- jmeter使用代理服务器录制脚本端口号被占用
初学jmeter工具,在设置端口号时,使用8080,IE设置的局域网端口也为8080,启动代理服务器时,提示:Could not create script recorder-port in use. ...
- Android 常用adb shell 命令
原文地址http://blog.csdn.net/rain_butterfly/article/details/40894807 调试Android程序有时需要adb shell 命令,adb全称An ...
- iis7.5安装配置php环境详细清晰教程,三步实现【图文】
iis7.5安装配置php环境详细清晰教程,三步实现[图文] iis7.5是安装在win7.win8里的web服务器,win2003.win2000的web服务器使用的是iis6.0,由于win7.w ...
- Linux系统——shell脚本应用示例
传入一个网段地址,自动找出本网段内存活的IP地址.2,将存活的IP地址当作密码来创建Linux用户,用户名格式为:你的名字_数字 3,有几个存活IP地址,就自动创建几个用户 4,最后将创建的用户名 ...
- Leetcode 357
没用过Leetcode刷题,只能按照自己的想法随便写写了 思路:1.第一位数有9种(除了0)可能,第二位数有9种(除了第一位)可能,第三位数有8种(除了前两位)可能,以此类推...9*8*7*...( ...
- hdu4057 Rescue the Rabbit
地址:http://acm.hdu.edu.cn/showproblem.php?pid=4057 题目: Rescue the Rabbit Time Limit: 20000/10000 MS ( ...
- 杭电1020Encoding
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1020 题目: Problem Description Given a string containing ...
- Java并发编程之CountDownLatch的用法
一.含义 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能.CountDownLatch是一个同步的辅助类,它可以允许一个或多个线程等待, ...