一、类方法

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 面向对象:类方法&静态方法的更多相关文章

  1. python 面向对象 类方法,静态方法,property

    property 内置装饰器函数 只在面向对象使用 把方法当初属性使用(方法不加参数) 例子: class Rectangle: def __init__(self,long,wide,color): ...

  2. Python面向对象之静态方法、静态方法与类方法

    静态属性: 类调用函数属性时,需要先将类实例化,再将实例作为函数属性传入:类的实例调用函数属性时需要在后面加括号. class Building: def __init__(self, name, o ...

  3. python 实例化 类方法 静态方法 成员变量 实例方法 等调用

    1.参考代码如下 # coding:utf-8 class student: # 成员变量 ok = None like = '八戒你瘦了' # 实例方法 def __init__(self): # ...

  4. Python面向对象 | 类方法 classmethod

      类方法:必须通过类的调用,而且此方法的意义:就是对类里面的变量或者方法进行修改添加. 例一个商店,店庆全场八折,代码怎么写呢? class Goods: __discount = 0.8 # 折扣 ...

  5. Python面向对象静态方法,类方法,属性方法

    Python面向对象静态方法,类方法,属性方法 属性: 公有属性 (属于类,每个类一份) 普通属性 (属于对象,每个对象一份) 私有属性 (属于对象,跟普通属性相似,只是不能通过对象直接访问) 方法: ...

  6. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  7. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  8. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  9. Python - 面向对象(二)类方法、静态方法

    面向对象的各种方法 静态方法 - @staticmethod class Person(): name = "cool guy" @staticmethod def static( ...

  10. python 浅析类方法与静态方法

    类方法,静态方法的定义 Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即 ...

随机推荐

  1. 最基础前端路由实现,事件popstate使用

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Java poi导出设置 Excel某些单元格不可编辑

    小白的总结,大神勿喷:需要转载请说明出处,如果有什么问题,欢迎留言 一.需求: 1.某一列 .某一行或某些单元格不可编辑,其他列可以编辑 二.期间遇到的问题 1.无法设置成不可编辑 2.设置为不可编辑 ...

  3. 带你揭开WebSerivce的面纱

    最近在工作中遇到这样的一个项目(暂且定为项目A),项目A本身是用PHP开发的,但是其数据是来自于另一个使用java开发的项目(暂且定为项目B),项目A不能操作项目B的数据库,它有其自己的一套数据库,只 ...

  4. idea开发环境搭建ssh

    idea2020完整web开发(struts2+spring+hibernate) idea破解 第一步: 下载最新的 IDEA 2020.3.2 版本安装包 https://www.jetbrain ...

  5. AD小白如何发板厂制板--导出gerber文件和钻孔文件+嘉立创下单教程

    AD如何发工程制板子? 方式1,发PCB源文件给板厂 方式2,发一些工艺文件给板厂,这样就无须泄漏你的PCB源文件了,一个硬件工程师必须要掌握方式2. 方式2要做的就是导出gerber文件和钻孔文件, ...

  6. CF1265B Beautiful Numbers 题解

    Content 给定一个 \(1\sim n\) 的排列,请求出对于 \(1\leqslant m\leqslant n\),是否存在一个区间满足这个区间是一个 \(1\sim m\) 的排列. 数据 ...

  7. CF20B Equation 题解

    Content 解方程 \(ax^2+bx+c=0\). 数据范围:\(-10^5\leqslant a,b,c\leqslant 10^5\). Solution 很明显上求根公式. 先来给大家推推 ...

  8. SpringCloud (一) Eureka

    Eureka Eureka 是一个服务治理组件,它主要包括服务注册和服务发现,主要用来搭建服务注册中心. Eureka 是一个基于 REST 的服务,用来定位服务,进行中间层服务器的负载均衡和故障转移 ...

  9. MySQL查看数据库连接数

    mysql> show status like 'Threads%' -> ; +-------------------+-------+ | Variable_name | Value ...

  10. 微信公众号开发用户授权登录报"redirect_uri 参数错误"错误

    微信公众号开发 授权获取用户信息报错 "redirect_uri 参数错误" 出现这个情况要检查下 微信公众号配置了网页授权域名 在这里配置微信公众号redirect_uri中的域 ...