【Python高级编程】类属性与类方法

【Python高级编程】类属性与类方法

www.bilibili.com/video/BV1pP...

授课进程

1、属性

  • 类属性:

    在方法外部声明的变量,在内存中只保存一份,每个对象都可以引用类属性。一般用于保存每个对象都有的、并且值相同的内容,比如学生的国籍。

    类属性可以通过类名、对象名调用。通过类名调用时可以修改类属性的值,通过对象名调用时不能修改。

  • 实例属性:

    在方法内部声明的、并且每个属性前都有slef关键字,如self.name。实例属性在每个对象中保存一份,每一个对象都具有该属性,但是值可能不同,比如学生姓名、年龄等。

    实例属性通过对象名调用(在类的内部通过self调用,类的外部通过对象名调用)。

    如下的student类:

python 复制代码
  class Student:
      country = "China"   # 类属性,在方法外部声明
      def __init__(self,name,age,cla):  # 构造方法
          # 方法内部声明的变量叫做实例属性,self.变量名 = value,可以在类的其他方法中调用
          self.name = name   # 实例属性,在类的内部通过self调用,在外部通过对象调用
          self.age = age
          self.cla = cla   # 班级
      def out(self):
          print(f'姓名:{self.name}\n年龄:{self.age}\n班级:{self.cla}\n国籍:{self.country}')

country为类属性。

在info方法中声明的self.name、self.age等为实例属性。

实例化student类:

python 复制代码
st1 = Student('张三',16,'高一二班')  # 实例化
st2 = Student('张四',17,'高一三班')  # 实例化
print(f'姓名:{st1.name}\t国籍:{st1.country}')  # 姓名:张三    国籍:China
print(f'姓名:{st2.name}\t国籍:{st2.country}')  # 姓名:张四    国籍:China
# 两个对象访问类属性时返回的都是China,访问name时分别返回张三和张四
st1.country = 'USA'  
# 通过对象st1访问country并赋值为USA,此时实际是在对象st1的存储空间中声明了一个属性country,再次通过st1访问country时则访问的是st1内部存储空间的country,即USA
print(st1.country)  # USA
print(st2.country)  # China,st2的存储空间中没有country,所有它依然访问的是类属性country
print(Student.country)
Student.country = 'Jsp'  # 使用类名调用类属性并重新赋值
print(st1.country)  # 访问的还是st1中的country,USA
print(st2.country)  # Jsp
print(Student.country)  # Jsp

2、方法

  • 类方法

    通过装饰器@classmethod声明,至少有一个cls参数,通过类调用。

    调用实例方法时,自动将调用该方法的对象赋值给self。

  • 实例方法

    类中最常用的方法,至少有一个self参数,由对象调用。

    调用实例方法时,自动将调用该方法的对象赋值给self。

  • 静态方法

    通过装饰器@staticmethod声明,无默认参数,通过类调用。

python 复制代码
class Cls:
    def func1(self):
        print('实例方法,self表示调用方法的对象')
    @classmethod   # 装饰器,用于声明类方法
    def func2(cls):
        print('类方法,cls表示调用方法的类')
    @staticmethod  # 装饰器,用于声明静态方法
    def func3():
        print('静态方法')
obj = Cls()  # 实例化
obj.func1()  # 对象调用实例方法
Cls.func2()  # 类调用类方法
Cls.func3()  # 类调用静态方法

课程小结

课程讲解了类属性、实例属性、类方法、实例方法的声明与使用,要求能在代码中灵活使用。

随堂作业

按以下要求完成编码:

  • 声明一个资金类,有3个类属性,分别保存销售总额,食品类销售额、服饰类销售额;声明一个类方法用于更新销售总额、以及不同商品类别的销售额
  • 声明一个销售类,包含销售的商品名称、类别、单价、销售数量,销售完成后需要更新销售总额以及对应类别商品的销售额
相关推荐
2301_80920470几秒前
Golang如何做Clean Architecture_Golang整洁架构教程【详解】
jvm·数据库·python
m0_62457859几秒前
PHP源码能否在无盘工作站运行_网络启动硬件要求【说明】
jvm·数据库·python
战南诚2 分钟前
Flask中的URL ——url_for() 与 自定义动态路由过滤器
后端·python·flask
Black蜡笔小新2 分钟前
自动化AI算法训练服务器DLTM企业级AI模型工作站构筑企业AI自主可控新模式
人工智能·算法·自动化
硅基流动3 分钟前
硅基流动上线百度 ERNIE-Image
人工智能·百度
yexuhgu3 分钟前
CSS Grid布局如何实现项目重叠效果_利用z-index与grid-area实现
jvm·数据库·python
. . . . .4 分钟前
Claude Code 插件市场开发及注意事项
人工智能·gitcode
三产4 分钟前
Hermes 教程 04:多平台网关
人工智能
Zldaisy3d6 分钟前
上交大特材所 l 同步辐射CT与机器学习驱动增材制造气雾化粉末表征及工艺优化
人工智能·机器学习·制造
源码之家7 分钟前
计算机毕业设计:Python基于知识图谱的医疗问答系统 Neo4j 机器学习 BERT 深度学习 ECharts(建议收藏)✅
python·深度学习·机器学习·信息可视化·数据分析·知识图谱·课程设计