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类变量,实例变量,类方法,实例方法,静态方法的分析的更多相关文章

  1. Python 类变量 实例变量

    类变量: ​ 是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的).例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例. 实例变量: 实例 ...

  2. python学习笔记(二十二)实例变量、实例方法、类变量、类方法、属性方法、静态方法

    实例变量:在类的声明中,属性是用变量来表示的.这种变量就称为实例变量,也就是成员变量. 实例方法:在类中声明的方法,例如:my(self),必须实例化之后才可以使用,否则会报错. 类变量:公共的变量, ...

  3. python实例、类方法、静态方法

    [python实例.类方法.静态方法] 参考:http://blog.163.com/yang_jianli/blog/static/161990006201122411586729/

  4. 第8.28节 Python中使用__setattr__定义实例变量和实例方法

    一. 引言 根据前面章节介绍的内容,我们知道实例变量.实例方法的定义可以通过以下方法进行: 在类体中直接定义实例变量.实例方法: 在实例方法中定义实例变量.实例方法: 在类体外调用方使用赋值语句赋值定 ...

  5. Python staticmethod classmethod 普通方法 类变量 实例变量 cls self 概念与区别

    类变量 1.需要在一个类的各个对象间交互,即需要一个数据对象为整个类而非某个对象服务. 2.同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见. 3.有独立的存储区,属于整个类.   ...

  6. Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

    一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...

  7. Python 属性方法、类方法、静态方法、 特殊属性__doc__ (内建属性)

    总结:和类的关联性讲:属性方法>类方法>静态方法 属性方法@property:仅仅是调用方式不用+括号. 类方法@classmethod:访问不了累的属性变量,只可以访问类变量. 静态方法 ...

  8. 『无为则无心』Python面向对象 — 58、类方法和静态方法

    目录 1.实例方法 2.类方法 (1)类方法特点 (2)类方法使用场景 3.静态方法 (1)静态方法特点 (2)静态方法使用场景 1.实例方法 实例方法既可以调用静态方法也可以调用类方法. # 定义一 ...

  9. 第7.11节 案例详解:Python类实例变量

    上节老猿介绍了实例变量的访问方法,本节结合一个具体案例详细介绍实例变量访问. 本节定义一个Vehicle类(车),它有三个实例变量self.wheelcount(轮子数).self.power(动力) ...

  10. python_94_类变量实例变量

    class Role: n=123#类变量 name='我是类name' list=[] def __init__(self,name,role,weapon,life_value=100,money ...

随机推荐

  1. jenkins用户管理(Role-based Authorization Strategy插件使用)

    安装:Role-based Authorization Strategy插件 一.点击左侧的"系统管理"-->再点击绿色的"管理插件"  二.点击&quo ...

  2. JSP页面实现自动跳转!

    JSP页面实现自动跳转!一.页面自动刷新: 把如下代码加入<head>区域中<meta http-equiv=”refresh” content=”5″>注:content=” ...

  3. python爬虫中文乱码解决方法

    python爬虫中文乱码 前几天用python来爬取全国行政区划编码的时候,遇到了中文乱码的问题,折腾了一会儿,才解决.现特记录一下,方便以后查看. 我是用python的requests和bs4库来实 ...

  4. PATH and CLASSPATH

    PATH and CLASSPATH 1. 可以不设置PATH直接运行Java应用的.PATH的设置只是为了使用上的方便. 2. PATH设置的是Java的bin目录,使得bin目录下的可执行程序能够 ...

  5. IOS自动化定位方式

    原文地址http://blog.csdn.net/wuyepiaoxue789/article/details/77885136 元素属性的介绍 type:元素类型,与className作用一致,如: ...

  6. mysql数据库从删库到跑路之mysql数据类型

    一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...

  7. Android ExpandableListActivity

    ======MainActivity.java===================================== package com.zys.myexpandablelistactivit ...

  8. Linux系统——inode和block

    Linux文件属性 磁盘被分区并格式化为ext4文件系统后,会生成一定数量的inode和block Inode 索引节点 作用:存放文件的属性信息以及作为文件的索引(指向文件的实体block) Blo ...

  9. openocd shell脚本

    openocd.sh #! /usr/bin/expectset timeout 30spawn suexpect "密码:"send "123456\r"se ...

  10. 获取Android设备的方向,Sensor和SensorManager实现手机旋转角度

    http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1009/425.html 带有g-sensor的Android设备上可通过API ...