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 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...
随机推荐
- 【C/C++】从矩阵左上角走到右下角
tx的笔试,但是只过了10%,就离谱 #include <bits/stdc++.h> using namespace std; const int maxn = 1010; long d ...
- 【C/C++】贪心/算法笔记4.4/PAT B1020月饼/PAT B1023组内最小数
简单贪心 所谓简单贪心,就是每步都取最优的一种方法. 月饼问题:有N种月饼,市场最大需求量D,给出每种月饼的库存量和总售价. 思路:从贵的往便宜的卖.如果当前的已经卖完了,就卖下一个.如果剩余D不足, ...
- JDK各版本新增的主要特性总结
JDK1.5新特性: 1.自动装箱与拆箱: 2.枚举 3.静态导入,如:import staticjava.lang.System.out 4.可变参数(Varargs) 5.内省(Introspec ...
- 内存泄漏避雷!你真的了解重写equals()和hashcode()方法的原因吗?
基本概念 要比较两个对象是否相等时需要调用对象的equals() 方法: 判断对象引用所指向的对象地址是否相等 对象地址相等时, 那么对象相关的数据也相等,包括: 对象句柄 对象头 对象实例数据 对象 ...
- String类源码分析
1.String类注释说明 /** * The {@code String} class represents character strings. All * string literals in ...
- CF139A Petr and Book 题解
Content 小 P 有一本 \(n\) 页的书,现给出他一周七天每天的阅读页数,求它在星期几读完这本书. 数据范围:\(1\leqslant n\leqslant 1000\). Solution ...
- Razor语法2
语法名称 Razor 语法 Web Forms 等效语法 代码块 @{ int x = 123; string y = "because."; } <% int x = 12 ...
- java 编程基础 类加载器
什么是类加载器 类加载器负责将class文件(可能在磁盘上,也可能在网络上)加载到内存中,并为之生成对应的java.lang.Class对象.Java开发中无须过分关心类加载机制,但所有的编程人员都应 ...
- Linux使用docker安装Jenkins 并进行jar包发布
拉取镜像 docker pull jenkins/jenkins:lts 创建docker-compose.yml 文件 (主要习惯 也可以不用这种方式) Linux安装docker-compose ...
- js(jQuery)获取自定义data属性的值
有时候因为需要在标签上设置自定义data属性值, <div class="col-sm-6 col-md-4" id="get_id" data-c_id ...