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 ...
随机推荐
- 【opencv】ubuntu opencv imshow()报错
错误提示: ubuntu opencv imshow() 报错 windows.cpp报错 the function is not implemented If you are on Ubuntu o ...
- Travel---hdu5441(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:是有n个城市,m条边包含u v w:代表u到v的时间是w: 给q的时间x,求在x时间内Ja ...
- js的class属性获取、增加、移除
2018年4月10日,北京城的第三份工作已经开始,坚信自己在这里能学到很多,加油! 贴代码,昨天回顾了一点js知识: <script> $(function(){ //赋予一个点击事件 $ ...
- 机房断电导致MySQL同步1594错误
1.错误信息 Last_IO_Error: Got fatal error from master when reading data from binary log: ' at 208645951. ...
- python爬虫系列(1)——一个简单的爬虫实例
本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容:分析html中 ...
- Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库
转载自 https://www.cnblogs.com/luyingfeng/p/6386093.html 安全起见,数据库的访问多半是要做限制的,所以就有一个直接的问题是,往往多数时候,在别的机器上 ...
- K-medodis聚类算法MATLAB
国内博客,上介绍实现的K-medodis方法为: 与K-means算法类似.只是距离选择与聚类中心选择不同. 距离为曼哈顿距离 聚类中心选择为:依次把一个聚类中的每一个点当作当前类的聚类中心,求出代价 ...
- webpack打包页面空白的解决方法
- JS中将字符串中每个单词的首字母大写化
今天看到一个帖子,处理js中字符串每个单词的首字母大写. 原贴地址:关于字符串中每个单词的首字母大写化问题 受到启发,自己跟着改写了几个版本如下,请大家指正. 1.for循环: var a = 'Hi ...
- bash 获取时间段内的日志内容
需求,获取时段内的/var/log/messages文件内出现错误的消息,支持多行的消息,支持天,小时分钟,秒级的区间,可以修改监控的日志对象 #!/bin/bash if [ $# != 1 ] ; ...