1、Python中的类属性
(1)类属性描述
在面向对象中,属性一般可以分为两种形式:① 对象属性(成员属性) ② 类属性
在Python代码中,一切皆对象。类也是一种特殊的对象,所以我们也可以为类来创建一个属性 => 类属性
注意:
既然类也可以拥有属性,类属性与对象属性有何区别呢?
对象属性(成员属性)是由这个类产生的对象所拥有的属性。
类属性:并不是由实例化对象拥有的,而是这个类所拥有的属性,可以理解为是所有对象共同拥有的属性,但是其不属于某一个对象。
(2)语法
定义类属性:
class 类名称():
属性 = 属性值
访问类属性:
既可以在类的里面也可以在类的外面
类名.类属性(推荐)
对象.类属性(也可以,但是不推荐)
(3)案例
应用场景:比如我们想知道由这个类到底生成了多少个对象,如何定义一个属性来进行统计呢?
强调一下:类属性并不是某个对象所拥有的,而是所有对象所共同组成的一个特征,我们就可以把其定义为类属性
class Person(object):
# 定义一个类属性:用于统计到底由这个类产生了多少个对象
count = 0
# 通过__init__魔术方法定义的都是对象属性
def __init__(self, name, age):
self.name = name
self.age = age
# 对类属性进行累加计数
Person.count += 1
p1 = Person("小张", 22)
p2 = Person("小王", 22)
print(f'由Person类一共创建了{Person.count}个对象。')
结果:
2、Python中的类方法
(1)类方法描述
在Python代码中,类属性与对象属性一样,都强调封装性,不建议直接在类的外部直接对类属性进行操作。
如果想在类的外部获取类的信息,必须使用类方法来实现。
(2)基本语法
类方法 :
class 类名称():
类属性 = 属性值
@classmethod => 装饰器
def 类方法(cls):
因为这个方法属于类方法,所以cls代表这个类本身
调用类方法:
类名称.类方法() => 强烈推荐使用第一种
对象.类方法()
(3)案例
案例:统计Tool工具类到底生成了多少个工具类对象
class Tool(object):
# 定义一个类属性
count = 0
# 定义对象属性
def __init__(self, name):
self.name = name
# 对类属性进行操作,进行+1
Tool.count += 1
# 定义一个类方法专门用于操作类属性
@classmethod
def getCount(cls):
return f'您一共实例化了{cls.count}个对象。'
# 实例化对象
t1 = Tool('斧头')
t2 = Tool('榔头')
t3 = Tool('锤子')
# 调用类方法,输出一共创建了多少个对象
print(Tool.getCount())
结果:
3、Python中的静态方法
(1)静态方法描述
什么样的方法可以封装为静态方法?
答:既不需要调用自身属性(对象属性、类属性),也不需要调用自身方法(对象方法、类方法),本身就是一个独立功能。
(2)语法
定义:
class 类名称():
@staticmethod
def 静态方法():
由于静态方法本身就是一个独立功能,既不需要调用自身属性也不需要调用自身方法,所以其没有参数。
调用静态方法: 类名.静态方法() 或者 对象.静态方法()
(3)案例
class StudentManager(object):
# 打印系统功能菜单
@staticmethod
def menu():
print('-' * 40)
print('欢迎使用传智教育学生管理系统V1.0')
print('【1】添加学员信息')
print('【2】删除学员信息')
print('【3】修改学员信息')
print('【4】查询学员信息')
print('-' * 40)
# 调用静态方法 => 类名.静态方法() 或者 对象.静态方法()
StudentManager.menu()
结果: