python 面向对象:类方法&静态方法
一、类方法
1.1 概念和语法说明
类方法就是针对类对象定义的方法。在类方法内部可以直接访问类属性或者调用其他的类方法
语法如下:
@classmethod
def 类方法名(cls):
pass
说明:
类方法需要修饰器 @classmethod 来标识,告诉解释器这是一个类方法。
类方法第一个参数应是cls(class的缩写),参数也可以使用其他名称,不过习惯使用cls,作用与self类似,
在方法内部可以使用 cls. 访问类的属性以及其他的类方法。
1.2 代码演示
class Tool(object):
count = 0
@classmethod
def show_count(cls):
print(F"工具对象的数量:{cls.count}")
def __init__(self, name):
self.name = name
# 通过 类名.类属性 的方式访问类属性;
# 也可以通过 对象.类属性 的方式访问,但是一般不建议这么做。因为如果调用前使用了赋值语句结果会变更
Tool.count += 1
# 创建工具对象
tool1 = Tool("钳子")
tool2 = Tool("扳手")
tool3 = Tool("改刀")
# 调用类方法
Tool.show_count()
二、静态方法
2.1 概念和语法说明
在开发中,如果需要在类中封装一个方法,而这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成一个静态方法。
语法如下:
@staticmethod
def 静态方法名():
pass
说明:
静态方法需要使用修饰器 @staticmethod 来标识,告诉解释器这是一个静态方法。
静态方法不需要使用self 或 cls
可以通过 类名.静态方法名 的方式调用静态方法
2.2 代码演示
class Person(object):
@staticmethod
def eat():
print("喜欢吃")
Person.eat()
三、案例演练
3.1 案例需求
开发一个小游戏,需要为游戏增加游戏说明,游戏会展示游戏最高分和玩家姓名。
分析:
游戏说明与游戏本身没有任何关系,只是对游戏起到一个说明的功能,因此采用静态方法。
游戏分数为游戏的属性,不是玩家的属性,因此采用类方法。
玩家姓名是游戏操作对象的属性,因此采用实例方法。
3.2 代码演示
import random
class Game(object):
# 创建类属性
top_score = 0
top_score_player = ""
# 创建静态方法
@staticmethod
def game_help():
print("这个游戏应该这样玩...")
# 创建类方法
@classmethod
def show_top_score(cls):
print(F"玩家:{cls.top_score_player} 获得游戏最高分 {cls.top_score} 分!")
# 创建实例属性
def __init__(self, player_name):
self.player_name = player_name
# 创建实例方法
def play_game(self):
print(F"玩家:{self.player_name},正在玩游戏...")
score = random.randint(0, 100)
print(F"游戏结束,得分:{score}")
if score > Game.top_score:
Game.top_score = score
Game.top_score_player = self.player_name
Game.game_help()
zhangSan = Game("张三")
zhangSan.play_game()
liSi = Game("李四")
liSi.play_game()
Game.show_top_score()
输出结果:
这个游戏应该这样玩...
玩家:张三,正在玩游戏...
游戏结束,得分:70
玩家:李四,正在玩游戏...
游戏结束,得分:38
玩家:张三 获得游戏最高分 70 分!
python 面向对象:类方法&静态方法的更多相关文章
- python 面向对象 类方法,静态方法,property
property 内置装饰器函数 只在面向对象使用 把方法当初属性使用(方法不加参数) 例子: class Rectangle: def __init__(self,long,wide,color): ...
- Python面向对象之静态方法、静态方法与类方法
静态属性: 类调用函数属性时,需要先将类实例化,再将实例作为函数属性传入:类的实例调用函数属性时需要在后面加括号. class Building: def __init__(self, name, o ...
- python 实例化 类方法 静态方法 成员变量 实例方法 等调用
1.参考代码如下 # coding:utf-8 class student: # 成员变量 ok = None like = '八戒你瘦了' # 实例方法 def __init__(self): # ...
- Python面向对象 | 类方法 classmethod
类方法:必须通过类的调用,而且此方法的意义:就是对类里面的变量或者方法进行修改添加. 例一个商店,店庆全场八折,代码怎么写呢? class Goods: __discount = 0.8 # 折扣 ...
- Python面向对象静态方法,类方法,属性方法
Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...
- Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法
一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass
https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...
- Python - 面向对象(二)类方法、静态方法
面向对象的各种方法 静态方法 - @staticmethod class Person(): name = "cool guy" @staticmethod def static( ...
- python 浅析类方法与静态方法
类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...
随机推荐
- Hadoop生态圈学习-1(理论基础)
一.大数据技术产生的背景 1. 计算机和信息技术(尤其是移动互联网)的迅猛发展和普及,行业应用系统的规模迅速扩大(用户数量和应用场景,比如facebook.淘宝.微信.银联.12306等),行业应用所 ...
- HashMap、ConcurrentHashMap对比
1.hashmap的put的原理,hashmap的扩容及计算槽的算法,线程安全的hashtable.ConcurrentHashMap的区别是什么 1.1 hashMap的put原理 什么时候变成红黑 ...
- 度量驱动的DevOps实现
目录 一.简介 二.度量是什么 三.实践 四.QA问答 一.简介 Wiki上讲:DevOps(Development和Operations的组合词)是一种重视"软件开发人员(Dev)&quo ...
- Python绘制柱状图
1.1Python绘制柱状图对应代码如下所示 import matplotlib.pyplot as plt import numpy as np from pylab import mpl mpl. ...
- 新手指南:顶象验证码如何接入微信小程序?
自2017年小程序发布以来,经过4年的快速发展,小程序已然成为企业互联网布局不可或缺的一环.无论是互联网企业还是拥抱互联网的传统企业,无论是服务导向型企业还是产品导向型企业,小程序都为用户提供了一种轻 ...
- [BUUCTF]PWN——ez_pz_hackover_2016
ez_pz_hackover_2016 题目附件 解题步骤: 例行检查,32位,开启了RELRO保护,二进制的保护机制看这里 由于没有开启nx保护,对于这题一开始想到的是利用写入shellcode来获 ...
- CF1065A Vasya and Chocolate 题解
Content 小 V 有 \(s\) 块钱,商店里有巧克力卖,每块巧克力 \(c\) 块钱,现在商店给出优惠:购买 \(a\) 块巧克力可以免费获得 \(b\) 块巧克力,求小 V 最多能够买到的巧 ...
- java 数据类型:ArrayList;LinkList性能分析
各种线性表的性能分析. java提供的List就是一个线性表接口,ArrayList和LinkedList是线性表的两种实现.基于数组的线性表和基于链表的线性表. 一般来说,我们无需理会ArrayLi ...
- JAVA查询类别(菜单)下的所有子类别(递归)
/** * 获取父类别下面的所有子类别 * @return List<StoreGoodsCate> 返回当前类别下的所有子类别集合 */ public List<StoreGood ...
- Ubuntu Server 下快速搭建DLNA服务器
购买了一台二手服务器.用来存储重要图片,视频,代码文档等.突发奇想是否可以让电视访问服务器. 经过一番查找,最终确认三星电视支持DLNA协议.大家对minidlna 都比较看好.就试着搭建这个服务器, ...