Python 类属性
下表列出了 4 个常见的明星人物:
姓名 | 年龄 |
---|---|
周润发 | 58 |
成龙 | 55 |
刘德华 | 53 |
周星驰 | 54 |
进行归纳总结:
这些人物具有较高的知名度,把这些人物归类为明星;
如果使用面向对象技术对以上实体进行描述,周润发、成龙、刘德华、周星驰等人物是对象,描述这些知名人物的抽象是类,需要区分位于不同层次的属性:
本节讲解在 Python 中这两个层次上的属性的概念和使用。
1. 实例属性
实例属性是隶属于具体对象的属性,用于描述具体的对象。示例代码如下:
class Person:passzhou = Person() zhou.name = 'Zhou'zhou.age = print('name = %s, age = %d' % (zhou.name, zhou.age))liu = Person()liu.name = 'Liu'liu.age = print('name = %s, age = %d' % (liu.name, liu.age))
程序运行输出如下:
name = Zhou, age = 58 name = Liu, age = 53
2. self 参数
在前面的例子中,存在两个对象 zhou 和 liu,通过 zhou.name、liu.name 这样的形式访问实例属性。上面的例子存在一个显著的问题:
在第 7 行,使用 print(‘name = %s, age = %d’ % (zhou.name, zhou.age)) 打印对象 zhou
在第 12 行,使用 print(‘name = %s, age = %d’ % (liu.name, liu.age)) 打印对象 liu
以上这两行代码是雷同的,功能是重复的。Python 允许在类中定义方法,访问对象的属性,语法如下:
class 类名:def 方法(self):self.属性
在类中定义的方法,第一个参数 self 指向调用该方法的对象,在方法中通过 “self.属性” 这样的形式访问对象的实例属性。示例代码如下:
class Person:def introduce(self):print('name = %s, age = %d' % (self.name, self.age))zhou = Person() zhou.name = 'Zhou'zhou.age = zhou.introduce()liu = Person()liu.name = 'Liu'liu.age = liu.introduce()
在第 1 行,定义了类 Person
在第 5 行,使用类 Person 创建一个对象 zhou
在第 10 行,使用类 Person 创建一个对象 liu
3. 类属性
在 Python 中,类属性在类中的定义如下所示:
class 类名: 类属性 = 值
示例代码如下:
class Person:count = zhou = Person() zhou.name = 'Zhou'zhou.age = Person.count = Person.count + print('Person.count = %d' % Person.count)liu = Person()liu.name = 'Liu'liu.age = Person.count = Person.count + print('Person.count = %d' % Person.count)
在第 1 行,定义了类 Person
在第 4 行,使用类 Person 创建一个对象 zhou
因为新创建了一个对象 zhou
在第 10 行,使用类 Person 创建一个对象 liu
因为新创建了一个对象 liu
程序运行输出如下:
Person.count = 1 Person.count = 2