Python高级特性:类属性
来源:互联网 发布:最推荐的一部电影 知乎 编辑:程序博客网 时间:2024/05/25 20:00
简介
Python语言除了支持类实例的数据属性之外,还支持类属性,其为类本身所有。本文结合类属性的实例,介绍类属性的应用。
类属性实例
下面列出了一个类属性定义的实例。
'''Created on Mar 20, 2015@author: jliu'''class Book(object): '''Book class''' #record the boot count book_count = 0 #comment 1 def __init__(self, name, auther): self.name = name self.auther = auther self.increase_count() #comment 2# self.__class__.book_count += 1 #comment 3 @classmethod def get_count(cls): #comment 4 return cls.book_count @classmethod def increase_count(cls): cls.book_count += 1 if __name__ == '__main__': print "book_count: %d" % Book.book_count #comment 5 booka = Book("Learning Python", "Bob Liu") bookb = Book("Learning C++", "Bob Liu") print "book_count: %d" % booka.book_count #comment 6 print "book_count: %d" % Book.get_count() #comment 7
程序运行结果如下:
book_count: 0book_count: 2book_count: 2
注解1:我们在Book类中定义了类属性boot_count,它为所有类共有,且在任何实例创建前就已经有效了。在Java中,静态变量(对应Python中的类属性)和实例变量(对应Python中的数据属性)两者定义可紧跟在类定义之后(前者需要static关键字修饰,后一个没有)。在Python中,只有类的属性可以在这里定义,数据属性需要在__init__方法中定义,且数据属性的应用,需要使用self界定符,而类的引用,使用cls界定符。
注解2、4:我们可以通过定义类方法,来有效获取和设置类的属性,需要注意的是,类方法传递的首参数是cls;而实例方法传递的首参数是self
注解3:__class__是每个类实例的一个内置属性(每个类都有此属性,可通过内置函数dir查看类的内置属性);它是类的一个引用,而self是类的一个实例。创建一个实例类时,会调用__init__方法,它会操作类的属性book_count。这里我们展示了两种操作方式,这些操作不止影响新创建的实例,也影响类本身。
注解5、6: 从例子中,我们看到,类属性既可以通过直接对类引用,也可以通过任意类的实例来使用。类属性在创建任何实例之前,就已经存在了。
注解6、7:从运行结果上看,通过实例获取的类属性值与类方法获取值一致
类常量
类属性的另外一个高级应用是作为类级别的常量来使用,为了便于区别,类常量用大写字母来定义。但实际上它们不是真正的常量,是可以修改的。在Python没有常量,如果你视图修改的话,是可以改变这些所谓的常量的。这一点与Python的核心设计原则一致:坏的行为应该被克服而不是取缔。
0 0
- Python高级特性:类属性
- Python高级特性:私有属性
- Python--类的高级特性
- python 类属性 实例属性 特性
- Python类继承的高级特性
- Python类继承的高级特性
- Python高级特性
- Python的高级特性
- Python高级特性
- Python高级特性
- python高级特性
- Python高级特性:生成器
- python 高级特性
- Python学习----高级特性
- Python 高级特性 : 切片
- Python 高级特性 : 生成器
- python 高级特性
- Python高级特性
- 互斥量、临界区、信号量、事件标志组和消息邮箱
- the meaning of awk grep rc and perl
- About Me
- 单例模式(Java代码实现)
- C#打开文件或存储文件
- Python高级特性:类属性
- 写给新手程序员的一封信
- A little collection of cool unix terminal/console/curses tools
- Linux网络编程一步一步学-异步通讯聊天程序select
- Today I finish the multiple threads and socket programming
- 路由事件中级案例
- Linux网络状态工具ss命令使用详解
- socket No route to host - sovle
- 采样率和比特数