python:类属性、类方法与静态方法

Python:类属性与静态方法

一、类属性

在面向对象中,属性一般可以分为两种形式:① 对象属性(成员属性) ② 类属性

在python代码中,一切皆对象,类也可以是一种特殊的对象,所以我们也可以为类创建一个属性 =>类属性

那么类属性和成员属性有什么区别呢

对象属性(成员属性)是有这个类产生的对象所拥有的属性

类属性:并不是由实例化对象拥有的,而是这个类所拥有的属性,可以理解为所有对象共同拥有的属性,但是其不属于某一个对象。

定义:类属性并不是某个对象所拥有的,而是所有对象所共同组成的一个特征,我们就可以定义为类属性。

定义类属性:

class 类名称():
    属性名 = 属性值 # 在类内部,函数外部定义

# 类属性的访问:既可以在类的内部访问,也可以在类的外部访问
类名.属性名   
对象.属性名 (不推荐)

应用案例:我们想知道这个类产生了多少个对象,定义一个类属性来统计:

class Person(object):
    # 定义一个类属性来计算这个类实例化了多少个对象
    count = 0

    # 通过init魔术方法定义的都是对象属性
    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.count += 1  # 每次初始化都会调用init方法


p1 = Person('七落', 20)
p1 = Person('莫航', 19)
print(Person.count)   # 2

二、类方法

在Python代码中,类属性与对象属性一样,都强调封装特性,不建议直接在类的外部直接对类属性进行操作。

如果想要在类的外部获取类属性的信息,必须使用类方法来实现。

基本语法:

class 类名:
    类属性名 = 属性值
    
    @ classmethod  # 装饰器
    def 类方法(cls):
        # 因为这个方法属于类方法,cls代表类方法本身

       	
# 类方法的调用
类名.类方法()
对象名.类方法()   # 不推荐

应用案例:统计Tool类实例化了多少个对象。

class Tool(object):
    # 定义类属性
    count = 0

    def __init__(self, name):
        self.name = name
        Tool.count += 1

    # 定义一个类方法
    @classmethod
    def get_count(cls):  # cls 代表这个类本身,或者cls指向这个类
        return f'这个Tool类实例化了{cls.count}个工具!'  


p1 = Tool('斧头')
p2 = Tool('锯子')
print(Tool.get_count())

三、静态方法

在开发时候,如果需要在类中封装一个方法,这个方法

① 既不需要访问实例属性调用实例方法

② 也不需要访问类属性调用类方法

这个时候可以把这个方法封装为静态方法

基本语法:

class 类名:   
    @ staticmethod
    def 静态方法名():
        pass
    # 由于静态方法本身就是一个独立的功能,既不需要调用自身的属性,也不需要调用自身方法,所以其没有参数
    
# 访问
类名.静态方法名()
对象.静态方法名()
class StudentManage(object):
    # 打印一个系统菜单
    @staticmethod
    def menu():
        print('=' * 40)
        print('欢迎使用学生管理系统!')
        print('【1】添加学生信息')
        print('【2】删除学生信息')
        print('【3】修改学生信息')
        print('【4】查看学生信息')
        print('【5】退出系统')
        print('=' * 40)


StudentManage.menu()

posted @ 2023-09-25 15:58  七落安歌  阅读(184)  评论(0)    收藏  举报