python中类的属性(class attribute)的解释
来源:互联网 发布:历届网络文学奖 编辑:程序博客网 时间:2024/05/17 05:15
python中类的属性(class attribute)的解释
分类: python
着实被"dive into python"和"python简明教程"中对类的属性的介绍弄晕了,在经过了若干小时痛苦的想象和实践后,终于略有小成,写文一篇,帮助大家解惑.
我的环境是python2.5
知识准备
可以看这个连接先:
http://www.python.org/doc/curren ... 1600000000000000000
python中的类叫 class object,类的实例叫instance object.
类 Class Objects
类拥有两种操作,1.类属性 attribute references 2.实例化instantiation
类属性就相当于专属于一个类的变量(即某些语言中的类的静态公共变量static public),使用方法是:类名称.类属性名称
实例化则是创建一个类的实例的方法,使用方法是:类名称()
在使用实例化方法后,将会创建一个空的类实例,一般的python类的定义中会有一个特殊的方法来初始化,这个方法就是__init__(),当调用了类的实例化方法后,__init__()方法会立刻被这个类的实例调用.也就是说,__init__()不是构造函数,而是一个普通的方法.
类的实例 Instance Objects
类的实例只拥有一种操作,这就是 1.属性调用 attribute references.
属性调用指 1.数据属性 2.方法
数据属性
数据属性不需要预先定义!当数据属性初次被使用时,它即被创建并赋值(they spring into existence when they are first assigned to)看下面的例子
我们在类Test中并没有定义name这个数据属性,但是在代码中却可以直接使用,这就是数据属性.
方法
这个暂且不议.
如何定义类的属性
现在,抛开广义上对属性attribute的解释,在实际编程中经常用的属性这个词,在python的class中有两种属性:类属性,数据属性.(大多数编程语言都有这样两种属性).类属性属于类,数据属性属于类的实例.我们假设有类Test,则一般这两种属性的用法是
那么这两种属性应该在什么时候定义呢?
按照上面的讨论可知,数据属性不需要预先定义,当数据属性初次被使用时,它即被创建并赋值.而实际上,类属性也是如此.
大家看,数据属性name和类属性mode均没有在类中被定义,你要做的,只是在需要的时候使用他们即可.
如何预先给属性赋值
可以在类的定义中使用属性,先看这个例子类Test有方法ask.注意看程序中被注释掉的两行,在没有使用ask()方法前,运行被注释的那两句的任一句均会出错,提示"class Test has no attribute ...".但运行ask()后,我们在ask()方法中初始了这两个属性,则运行通过.
注意看ask()接收的参数theInstance,这个传过来的就是程序中类Test的实例t.一般的命名规范建议将这个参数命名为self.这个参数是python自动传入的,所以不需要再在程序中传.
如果想要在类实例化后立刻使用这些属性,那就应该把这些属性的初始放在__init__()方法中,前面说过了,__init__()方法在类的实例化结束后立刻被自动调用.所以我们的例子程序可以改成这样所以可以有这样的类定义数据属性date只有在调用了ask()方法后才可以被使用.当然这样也可以使用这个属性在程序中创建了date这个数据属性.可以想象,之后调用ask()方法时,数据属性date已经存在,只是被改变了值.
不用方法也可以初始化属性
看下面的示例程序运行的结果如下
win the game
win the game
at least 1 point
at least 1 point
at least 1 point
dont lose
现象可以概括为:"改变类属性,数据属性跟着变,改变数据属性,类属性不变".其中的原理,因为不明白,所以不乱说了.高人来解释下 :)
希望本文可以给迷糊的朋友以帮助.
我的环境是python2.5
知识准备
可以看这个连接先:
http://www.python.org/doc/curren ... 1600000000000000000
python中的类叫 class object,类的实例叫instance object.
类 Class Objects
类拥有两种操作,1.类属性 attribute references 2.实例化instantiation
类属性就相当于专属于一个类的变量(即某些语言中的类的静态公共变量static public),使用方法是:类名称.类属性名称
实例化则是创建一个类的实例的方法,使用方法是:类名称()
在使用实例化方法后,将会创建一个空的类实例,一般的python类的定义中会有一个特殊的方法来初始化,这个方法就是__init__(),当调用了类的实例化方法后,__init__()方法会立刻被这个类的实例调用.也就是说,__init__()不是构造函数,而是一个普通的方法.
类的实例 Instance Objects
类的实例只拥有一种操作,这就是 1.属性调用 attribute references.
属性调用指 1.数据属性 2.方法
数据属性
数据属性不需要预先定义!当数据属性初次被使用时,它即被创建并赋值(they spring into existence when they are first assigned to)看下面的例子
- class Test:
- pass
- t=Test()
- t.name='notus'
- print t.name
方法
这个暂且不议.
如何定义类的属性
现在,抛开广义上对属性attribute的解释,在实际编程中经常用的属性这个词,在python的class中有两种属性:类属性,数据属性.(大多数编程语言都有这样两种属性).类属性属于类,数据属性属于类的实例.我们假设有类Test,则一般这两种属性的用法是
- Test.mode
- t=Test()
- t.name
按照上面的讨论可知,数据属性不需要预先定义,当数据属性初次被使用时,它即被创建并赋值.而实际上,类属性也是如此.
因此,我们有了下面的例子
- class Test:
- pass
- t=Test()
- t.name='notus'
- print t.name
- Test.mode='auto'
- print Test.mode
如何预先给属性赋值
可以在类的定义中使用属性,先看这个例子
- class Test:
- def ask(theInstance):
- theInstance.name='notus'
- Test.mode='auto'
- ##print Test.mode
- t=Test()
- ##print t.name
- t.ask()
- print Test.mode
- print t.name
注意看ask()接收的参数theInstance,这个传过来的就是程序中类Test的实例t.一般的命名规范建议将这个参数命名为self.这个参数是python自动传入的,所以不需要再在程序中传.
如果想要在类实例化后立刻使用这些属性,那就应该把这些属性的初始放在__init__()方法中,前面说过了,__init__()方法在类的实例化结束后立刻被自动调用.所以我们的例子程序可以改成这样
- class Test:
- def __init__(self):
- self.name='notus'
- Test.mode='auto'
- ##print Test.mode
- t=Test()
- ##print t.name
- print Test.mode
- print t.name
- class Test:
- def __init__(self):
- self.name='notus'
- Test.mode='auto'
- def ask(self):
- self.date='2008'
- ##print Test.mode
- t=Test()
- ##print t.name
- print Test.mode
- print t.name
- ##print t.date
- t.ask()
- print t.date
- ##print Test.mode
- t=Test()
- ##print t.name
- print Test.mode
- print t.name
- t.date='2007'
- print t.date
不用方法也可以初始化属性
看下面的示例程序
- class Test:
- action='win the game'
- print Test.action
- t=Test()
- print t.action
- Test.action='at least 1 point'
- print Test.action
- print t.action
- t.action='dont lose'
- print Test.action
- print t.action
win the game
win the game
at least 1 point
at least 1 point
at least 1 point
dont lose
现象可以概括为:"改变类属性,数据属性跟着变,改变数据属性,类属性不变".其中的原理,因为不明白,所以不乱说了.高人来解释下 :)
希望本文可以给迷糊的朋友以帮助.
- python中类的属性(class attribute)的解释
- python中类的属性(class attribute)的解释
- python中类属性和数据属性的解释
- Python Class的实例属性/类属性
- python class 的属性
- python类class中_init_函数以及参数self的简单解释
- SimpleFormController类中属性的解释
- 09. 属性的Attribute
- struts-config中action 的attribute属性与name属性
- AS3 中 class 的属性
- 关于Tomcat: The value for the useBean class attribute is invalid 问题的另类解释
- python中类的属性
- python中Class类的用法
- C# attribute属性的例子
- http请求中Parameter(参数) 和Attribute(属性)的区别
- struts的action中attribute属性是什么作用?
- strtuts中 ActionForm的属性attribute深入解析
- JavaScript 中element和attribute以及节点、属性的增删
- 解决Button的OnClientClick与RequiredFieldValidator的问题
- SVN服务器搭建和使用(一)
- linux下递归删除目录下所有指定的文件
- eclipse中改变js文件编码方式
- hdu1285 确定比赛名次 (拓扑排序)
- python中类的属性(class attribute)的解释
- [ural 1018]Binary Apple Tree[树DP]
- 图文讲解:iOS App提交流程(1)
- SVN服务器搭建和使用(二)
- Struts2 validator 验证器
- POJ--1113 -- Wall [使用卷包裹法求凸包] [Gift Wrapping]
- iOS开发中一些有用的小代码
- 为人们服务的asp.net 验证控件
- KMP算法 讲解