Python 类属性和实例属性
2023-09-11 14:18:27 时间
下表列出了 4 个常见的明星人物:
姓名 | 年龄 |
---|---|
周润发 | 58 |
成龙 | 55 |
刘德华 | 53 |
周星驰 | 54 |
进行归纳总结:
- 这些人物具有较高的知名度,把这些人物归类为明星;
- 每个明星两个属性:姓名和年龄。明星这个群体具有一个属性:数量,在这张表格中,明星的数量是 4;
- 姓名和年龄等属性是用于描述具体的一个对象(例如:周润发),而人物的数量是用于描述明星这个类别。
如果使用面向对象技术对以上实体进行描述,周润发、成龙、刘德华、周星驰等人物是对象,描述这些知名人物的抽象是类,需要区分位于不同层次的属性:
- 隶属于具体对象的属性,例如:姓名、年龄
- 隶属于类的属性,例如:人物数量
本节讲解在 Python 中这两个层次上的属性的概念和使用。
1. 实例属性
实例属性是隶属于具体对象的属性,用于描述具体的对象。示例代码如下:
class Person:
pass
zhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
print('name = %s, age = %d' % (zhou.name, zhou.age))
liu = Person()
liu.name = 'Liu'
liu.age = 53
print('name = %s, age = %d' % (liu.name, liu.age))
- 在第 1 行,定义了类 Person
- 在第 4 行,使用类 Person 创建一个对象 zhou
- 在第 5 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 6 行,设置对象 zhou 的属性 age,该属性为实例属性
- 在第 7 行,打印对象 zhou 的属性 name 和 age
- 在第 9 行,使用类 Person 创建一个对象 liu
- 在第 10 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 11 行,设置对象 liu 的属性 age,该属性为实例属性
- 在第 12 行,打印对象 liu 的属性 name 和 age
- 在第 5 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 6 行,设置对象 zhou 的属性 age,该属性为实例属性
- 在第 7 行,打印对象 zhou 的属性 name 和 age
- 在第 10 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 11 行,设置对象 liu 的属性 age,该属性为实例属性
- 在第 12 行,打印对象 liu 的属性 name 和 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 = 58
zhou.introduce()
liu = Person()
liu.name = 'Liu'
liu.age = 53
liu.introduce()
- 在第 1 行,定义了类 Person
- 在第 2 行,定义了类 Person 的方法 introduce,introduce 的 self 参数指向调用 introduce 方法的对象
- 在第 3 行,introduce 方法通过 self.name 和 self.age 访问对象的属性
- 在第 5 行,使用类 Person 创建一个对象 zhou
- 在第 6 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 7 行,设置对象 zhou 的属性 age,该属性为实例属性
- 在第 8 行,调用对象 zhou 的方法 introduce,对象 zhou 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 zhou
- 在第 10 行,使用类 Person 创建一个对象 liu
- 在第 11 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 12 行,设置对象 liu 的属性 age,该属性为实例属性
- 在第 13 行,调用对象 liu 的方法 introduce,对象 liu 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 liu
- 在第 2 行,定义了类 Person 的方法 introduce,introduce 的 self 参数指向调用 introduce 方法的对象
- 在第 3 行,introduce 方法通过 self.name 和 self.age 访问对象的属性
- 在第 6 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 7 行,设置对象 zhou 的属性 age,该属性为实例属性
- 在第 8 行,调用对象 zhou 的方法 introduce,对象 zhou 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 zhou
- 在第 11 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 12 行,设置对象 liu 的属性 age,该属性为实例属性
- 在第 13 行,调用对象 liu 的方法 introduce,对象 liu 被传递给方法 introduce,作为 self 参数,在执行 introduce 时,self 参数指向对象 liu
3. 类属性
类属性是隶属于类的属性,用于描述类的特征。
在 Python 中,类属性在类中的定义如下所示:
class 类名:
类属性 = 值
示例代码如下:
class Person:
count = 0
zhou = Person()
zhou.name = 'Zhou'
zhou.age = 58
Person.count = Person.count + 1
print('Person.count = %d' % Person.count)
liu = Person()
liu.name = 'Liu'
liu.age = 53
Person.count = Person.count + 1
print('Person.count = %d' % Person.count)
-
在第 1 行,定义了类 Person
-
在第 2 行,定义了类 Person 的属性 count,该属性是类属性,描述了 Person 对象的数量
-
在第 4 行,使用类 Person 创建一个对象 zhou
- 在第 5 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 6 行,设置对象 zhou 的属性 age,该属性为实例属性
-
因为新创建了一个对象 zhou
- 在第 7 行,访问 Person 的类属性 count,对其增加 1
- 在第 8 行,打印 Person 的类属性 count
-
在第 10 行,使用类 Person 创建一个对象 liu
- 在第 11 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 12 行,设置对象 liu 的属性 age,该属性为实例属性
-
因为新创建了一个对象 liu
- 在第 13 行,访问 Person 的类属性 count,对其增加 1
- 在第 14 行,打印 Person 的类属性 count
在第 1 行,定义了类 Person
在第 2 行,定义了类 Person 的属性 count,该属性是类属性,描述了 Person 对象的数量
在第 4 行,使用类 Person 创建一个对象 zhou
- 在第 5 行,设置对象 zhou 的属性 name,该属性为实例属性
- 在第 6 行,设置对象 zhou 的属性 age,该属性为实例属性
因为新创建了一个对象 zhou
- 在第 7 行,访问 Person 的类属性 count,对其增加 1
- 在第 8 行,打印 Person 的类属性 count
在第 10 行,使用类 Person 创建一个对象 liu
- 在第 11 行,设置对象 liu 的属性 name,该属性为实例属性
- 在第 12 行,设置对象 liu 的属性 age,该属性为实例属性
因为新创建了一个对象 liu
- 在第 13 行,访问 Person 的类属性 count,对其增加 1
- 在第 14 行,打印 Person 的类属性 count
程序运行输出如下:
Person.count = 1
Person.count = 2
相关文章
- Python回调函数用法实例
- Python安装模块出错(ImportError: No module named setuptools)解决方法
- 【Python】python 日期操作
- python开发笔记-python-numpy
- Python操作Mysql实例代码教程在线版(查询手册)_python
- Python 之 __new__() 方法与实例化
- Python 字符串_python 字符串截取_python 字符串替换_python 字符串连接
- 【python基础】Linux环境下非root用户安装Python和第三方包
- python中hashlib模块用法示例
- Python中类的继承代码实例
- python中的实例方法、静态方法、类方法、类变量和实例变量浅析
- 华为OD机试 - 求满足条件的最长子串的长度(Java & JS & Python)
- 10个Python爬虫入门实例
- Python:更改默认启动的python程序及其对应的安装包路径(更改pip的默认安装包的路径)图文教程之详细攻略
- Python语言学习:在python中,如何获取变量的本身字符串名字而非其值/内容及其应用(在代码中如何查找同值的所有变量名)
- 100天精通Python(爬虫篇)——第46天:爬虫解析器BeautifulSoup4(基础+代码实战)
- 豆瓣点评9.3分,10w好评的《python实战案例80个实例问答》,28天基础入门,学不会我退出IT界
- Android手机打造你的Python&Java开发工具!
- 没错!4 个 Python 函数就可以让你的数据框「骚气满满」!
- python实战===2017年30个惊艳的Python开源项目 (转)
- Python服务Dokcer化并k8s部署实例
- Python pip下载的whl文件到哪里了?如何找到并使用这些whl文件?(whl离线安装包的制作过程示例)
- 一个月学会Python,零基础入门数据分析
- 学习Python(四):字符串
- Python 性能测试 Locust 实例