python 类属性、静态方法与类方法
1. 类属性
1.1 定义
- 在类中方法外通过
属性名 = 属性值定义的属性 - 访问方式:
类名.属性名对象名.属性名class Student:
cls_id = 102 stu = Student()
print(Student.cls_id)
print(stu.cls_id) print("---------") Student.cls_id = 103
print(Student.cls_id)
print(stu.cls_id) print("---------") stu.cls_id = 104
print(Student.cls_id)
print(stu.cls_id)运行结果:
102
102
---------
103
103
---------
103
104
- 在类中方法外通过
1.2 对象属性与类属性的区别
- (1)内存中存在数量不同
- 对象属性:创建了多少个对象,内存中就有多少份
- 类属性:内存中只存在类中只存在一份,但是对象可读取
- (2)定义位置不同
- 对象属性:定义在类内方法内
- 类属性:定义在类内方法外
- (3)访问方式不同
- 对象属性:
对象名.属性名 - 类属性:
类名.属性名- 读取类属性时,可以通过
对象名.属性名
- 读取类属性时,可以通过
- 对象属性:
- (4)生命周期不同
- 对象属性:创建对象 -> 对象被系统回收
- 类属性:加载全局命名空间 -> 程序结束
- (5)所有者不同
- 对象属性:属于对象
- 类属性:属于类
- (1)内存中存在数量不同
2. 静态方法
- 概念:类中的一个方法
- 格式:在方法上面添加
@staticmethod - 参数:可以有参数,也可以没有参数
- 应用场景:一般用于和类对象以及实例对象无关的代码
- 使用方式:
- (1)
类名.类方法名 - (2)
对象名.类方法名
- (1)
- 使用场景示例:
- 如:学生管理系统的展示主菜单
3. 类方法
- 概念:无需实例化就可以通过类直接调用的方法
- 格式:在方法上面添加
@classmethod - 参数:方法的第一个参数接收的一定是类本身
- 方法的参数为cls也可以是其他名称,但是一般默认为cls
- cls指向类对象(也就是下边示例中Goods)
- 应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)
- 使用方式:
- (1)
对象名.类方法名 - (2)
类名.类方法名
- (1)
- 使用场景示例:
- 修改所有商品的折扣
class Goods():
discount = 1
def __init__(self,price,name):
self.name = name
self.price = price
def price_discount(self):
return self.price * Goods.discount
@classmethod
def change_discount(cls,new_discount):
cls.discount = new_discount goods = Goods(20, "audi")
print(goods.price_discount())
Goods.change_discount(0.5)
print(goods.price_discount())运行结果:
20
10.0
- 修改所有商品的折扣
python 类属性、静态方法与类方法的更多相关文章
- python类的静态方法和类方法区别
先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. # coding:utf-8 class Foo(object): """类三种方法语法形式&q ...
- python类属性 静态方法
实例 实例就是由对象创建出来的实实在在的存在 创建出来的对象叫做类的实例 创建对象的动作叫做实例化 对象的属性叫做实例的属性 对象调用的方法叫做实例方法 类是一个特殊的对象 类属性 类属性 ...
- Python类(六)-静态方法、类方法、属性方法
静态方法 通过@staticmethod来定义,静态方法在类中,但在静态方法里访问不了类和实例中的属性,但静态方法需要类来调用 # -*- coding:utf-8 -*- __author__ = ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- Python类属性和类方法
01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 1) 在内存中为对象 分配空间 2) 调用初始化方法 __in ...
- python 类属性与方法
Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- python类属性和对象属性、类的普通方法和静态方法
类属性和对象属性的定义 class LearnClass(): #类属性 cls_attr = None def __init__(self,arg): #对象属性 self.obj_attr = a ...
- python——实例方法、静态方法、类方法、类变量和实例变量浅析
概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态 ...
随机推荐
- 06_jQuery对象初识(四)文档处理
1. 案例:在ul中添加li标签. append在最后添加 prepend在最前面添加 <ul id="ul"> <li>1</li> < ...
- linux crontab定时任务运行shell脚本(shell执行sql文件)
https://www.cnblogs.com/tiankongjava/p/6106743.html 今天做个linux定时任务(每晚12点把表汇总). 顺便写个博客记录一下~~ 为什么用linux ...
- 8种nosql数据库对比
1. CouchDB 所用语言: Erlang 特点:DB一致性,易于使用 使用许可: Apache 协议: HTTP/REST 双向数据复制, 持续进行或临时处理, 处理时带冲突检查, 因此,采用的 ...
- C语言源代码——计算任何一天是星期几
代码写的不严谨. 网上也有很多计算任何一天是星期几的C语言源代码,不过,有些代码含有一点点小错误.像闰年的分辨啊,或者是每个月的天数,再或者星期的计算公式,都是比较细微的环节,出一点错误都有可能导致结 ...
- 图解nginx配置负载均衡
1. 在Linux上准备两份tomcat 2. 修改两份tomcat的端口号 修改的端口如图所示: 3. 启动两个tomcat服务器 4. 修改两个服务器上的主页方便测试区分 5. 在nginx配置文 ...
- 再不懂时序就 OUT 啦!,DBengine 排名第一时序数据库,阿里云数据库 InfluxDB 正式商业化!
云数据库 InfluxDB® 版介绍 阿里云数据库 InfluxDB® 版已于近日正式启动商业化 . 云数据库 InfluxDB® 是基于当前最流行的开源数据库 InfluxDB 提供的在线数据库服务 ...
- 转:LPC2214的PLL与定时器设置
原地址:http://blog.sina.com.cn/s/blog_4419d72d0100mu7h.html LPC2214的PLL与定时器设置 http://www.dpj365.cn/bbs/ ...
- PAT甲级——A1042 Shuffling Machine
Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...
- jps的用法及常见问题介绍
1.jps的作用 jps类似linux的ps命令,不同的是ps是用来显示进程,而jps只显示java进程,准确的说是当前用户已启动的部分java进程信息,信息包括进程号和简短的进程command. 2 ...
- python-基础-练习和面试题
给程序传参数 import sys print(sys.argv) 运行结果: 列表推导式 所谓的列表推导式,就是指的轻量级循环创建列表 1. 基本的方式 2. 在循环的过程中使用if 3. 2个fo ...