[Python基础] @statismethod和@classmethod中的注意事项

2023-05-16

声明
以下讨论将区别方法(method)和函数(function)两个概念,方法依托于对象,而函数可以脱离对象之外存在。

众所周知,python类中的方法有是两个注解(annotation):

  1. @statismethod:将方法标记为静态方法
  2. @classmethod:将方法标记为类方法,首参数为类(通常命名为cls)
  3. 什么也不写:对象方法,首参数为对象本身(通常命名为self,类似Java的this)

如何使用

(吐槽下CSDN的列表缩进真是垃圾)

  • 静态方法:
    • {类名}.{函数名}
    • {对象名}.{函数名} 或者 self.{函数名}
  • 类方法

    • {类名}.{函数名}
    • {对象名}.{函数名} 或者 self.{函数名}
  • 对象方法

    • {对象名}.{函数名} 或者 self.{函数名}
  • talk is cheap, show me the code
class Student():

    @staticmethod
    def create_name():
        return "mike"

    @classmethod
    def describe_my_type(cls):
        print(cls.__name__)  # 调用了魔法方法

    def hello(self):
        self.name = self.create_name()
        print("i am student, my name is %s" % self.name)

a = Student()
# 静态方法调用
create_name()  # 编译不通过
Student.create_name()
a.create_name()

# 类方法调用
Student.describe_my_type()
a.describe_my_type()

# 对象方法调用
a.hello()

注意避坑

Python中静态方法的初始化和Java不一样!
Java中由于方法、函数全部依托于类和对象,所以对于静态方法的初始化优先级最高。
而Python静态方法其实就是普通函数,所以初始化晚于对象方法(基于声明顺序)。如果未事先声明是无法调用的。
同一类中Java的加载顺序优先级:静态方法=类方法>对象方法
同一类中Python的加载顺序优先级:类方法>对象方法>静态方法

建议

Python的类中不要些statismethod,就用classmethod。statismethod放到外面单独作为函数定义。

像这样

def create_name():
    print("mike")
    return "mike"


class Student():    

    @classmethod
    def describe_my_type(cls):
        print(cls.__name__)

    def hello(self):
        self.name = self.create_name()
        print("i am student, my name is %s" % self.name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Python基础] @statismethod和@classmethod中的注意事项 的相关文章

  • 用于将 cython 中的许多 C++ 类包装到单个共享对象的项目结构

    我在文档 邮件列表和这个问题在这里 https stackoverflow com questions 10300660 cython and distutils 但我想得到一个更直接的答案来解决我的具体情况 我正在通过尝试一点一点地包装我
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • jq实现点击一个按钮,触发另一个点击事件

    jq实现点击一个按钮 xff0c 触发另一个点击事件 span class token function span span class token punctuation span span class token string 34 a
  • Promise.race()异步超时处理

    span class token keyword function span span class token function timeoutPromise span span class token punctuation span p
  • Ztree点击树节点选中前面的复选框

    span class token keyword var span setting span class token operator 61 span span class token punctuation span check span
  • 关于vue-cli项目搭建完成之后的yarn serve启动指令

    在项目的配置文件package json里面 xff0c 声明了两条指令的快捷指令 xff0c 当执行yarn serve的时候就相当于执行了vue cli service serve这条指令
  • Vue项目url中的BASE_URL解析

    在Vue中遇到很多url都用到了 lt 61 BASE URL gt 这个东西 span class token operator lt span span class token operator 61 span span class t
  • VSCode 中 js 文件类型注释报错的问题解决

    在阅读 Vue js 源码的时候遇见的一个问题 xff0c 本来可以忽略的玩意 xff0c 但是报错的波浪线 xff0c 如鲠在喉实在受不了 xff0c 解决之 报错说明 Type annotations can only be used
  • 3-3-07-nuxtjs案例realworld-nuxtjs

    realworld nuxtjs 项目地址 xff1a https gitee com dingxd9702 realworld nuxtjs 创建项目 mkdir realworld nuxtjsyarn init yyarn add n
  • 3-4-01-搭建自己的 Server Side Render

    搭建自己的 Server Side Render Vue 实例的服务端渲染 使用 vue server renderer 插件完成 vue 实例的服务端渲染使用 express 创建一个 node 服务器fs 模块读取 html 模板 sp
  • css实现超出部分显示省略号

    显示一行 xff0c 省略号 white span class token operator span space span class token punctuation span nowrap span class token punc
  • 正则表达式 匹配字符串 matches()方法的运用

    package cn niit demo5zhengze 正则表达式 匹配字符串 matches 方法的运用 public class Test public static void main String args checkQQ che
  • Blazor组件自做三 : 使用JS隔离封装ZXing扫码

    本文基础步骤参考前两篇文章 Blazor组件自做一 使用JS隔离封装viewerjs库 Blazor组件自做二 使用JS隔离制作手写签名组件 1 在文件夹wwwroot lib 添加zxing子文件夹 里面下载库文件 文件文末源码里可复制
  • zabbix报警方式,邮件报警和微信报警。

    整理csdn时候发现了一篇2016年整理zabbix报警不知道当时啥情况没有发布出去 xff0c 凑个数重新发布 最近这些天都在弄Zabbix不再只是简单的监控物理硬件 xff0c 服务端口 xff0c 流量图等 让Zabbix的功能发挥到
  • itk registration 1

    参考 xff1a https itk org ITKSoftwareGuide html Book2 ITKSoftwareGuide Book2ch3 html x26 1740003 18 图像配准是确定将一幅图像上的点映射到另一幅图像
  • 凤凰涅槃

    涅槃 xff0c 涅槃 xff0c 太阳般灿烂 xff0c 黑色的凤凰飞入烈火 xff0c 一切腐朽烧干 涅槃 xff0c 涅槃 xff0c 大海般坦然 xff0c 红色的凤凰浴火重生 xff0c 一切希望复燃 涅槃 xff0c 涅槃 xf
  • Qt单个模块的编译

    有可能使用的Qt没有自己需要的模块 xff0c 这个时候就只能自己去编译这个模 本次就拿QWebEngine这个模块来讲 xff0c 这个模块比较复杂 xff0c 编译很容易出问题
  • H5/js/web lottie解析json 播放视频或动画

    H5 js web lottie解析json 播放视频或动画 1 需要UI设计的小伙伴用AE把效果图导出时导成JSON格式 xff0c 并且把json引入到你需要用到的项目里面2 在index html中引入lottie min js3 查
  • VirtualBox虚拟机闪退后如何重新打开

    电脑 xff08 Mac系统 xff09 由于某种问题自动重启了 xff0c 重启后之前在用的VirtualBox xff08 虚拟机管理器 xff09 能恢复运行 xff0c 但VirtualBoxVM xff08 虚拟机终端 xff09
  • (五)建筑物多边形化简系列——最小外接矩形的获取

    最小外接矩形问题是在给出一个多边形 xff08 或一群点 xff09 xff0c 求出面积最小且外接多边形的矩形的问题 这个问题看起来并不难 xff0c 但是具体实现并不简单 除了调用现有的公开库之外 xff0c 这里给出一种简单且易理解的
  • 使用 LxRunOffline 实现 WSL 自定义安装、备份

    本文初衷是想在非默认目录下安装WSL xff0c 查阅资料后用LxRunOffline了解并实现了WSL自定义安装 前言 虽说目前的 WSL 在 Windows 10 生态中已经越发成熟 xff0c 但在实际使用中依旧存在一些不足之处 xf
  • [Python基础] @statismethod和@classmethod中的注意事项

    声明 xff1a 以下讨论将区别方法 xff08 method xff09 和函数 xff08 function xff09 两个概念 xff0c 方法依托于对象 xff0c 而函数可以脱离对象之外存在 众所周知 xff0c python类