返回顶部
首页 > 资讯 > 后端开发 > Python >python 面向对象之静态方法
  • 873
分享到

python 面向对象之静态方法

静态面向对象方法 2023-01-30 21:01:22 873人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不

通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与类唯一的关联就是需要通过类名来调用这个方法


举个例子:

class Dog(object):
    def __init__(self, name):
        self.name = name

    def eat(self,food): #吃东西
        print("%s is eating %s" % (self.name,food))


d = Dog("二哈")
d.eat('包子')

执行输出:

二哈 is eating 包子


将eat方法变成静态方法:

class Dog(object):
    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat(self,food): #吃东西
        print("%s is eating %s" % (self.name,food))


d = Dog("二哈")
d.eat('包子')

执行报错:

TypeError: eat() missing 1 required positional argument: 'food'

意思是eat()方法缺少1个位置参数:'food'


怎么会少呢?明明传了啊!

为了方便排错,去掉food参数

class Dog(object):
    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat(self): #吃东西
        print("%s is eating" % (self.name))


d = Dog("二哈")
d.eat()

执行报错:

TypeError: eat() missing 1 required positional argument: 'self'

意思是少了一个位置参数self


在类方法调用的时候,self会被自动传进去,不需要手动传。但现在很显然是没有传,因为它提示少了。

注意,这就是静态方法的作用。

静态方法实际上跟类没有关系了,相当于把类的关联截断的。它的作用,只是一个单纯的函数。

它和类唯一的关系就是,它必须通过类调用才行。就相当于它是类的下一级,在名义上来讲,它是类的一部分。


把self去掉

class Dog(object):
    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat(): #吃东西
        print("%s is eating" % ('二哈'))


d = Dog("二哈")
d.eat()

执行输出:

二哈 is eating


如果一定要self呢?需要把d给传进去

class Dog(object):
    def __init__(self, name):
        self.name = name

    @staticmethod  # 把eat方法变为静态方法
    def eat(self): #吃东西
        print("%s is eating" % (self.name))


d = Dog("二哈")
d.eat(d)

执行输出:

二哈 is eating


但是这样做,把它变成静态方法,就没有意义了


静态方法,相当于一个工具包,它和其他类没有任何关联。当需要它的之后,调取一下,就可以了

相当于os.system()和os.mkdir()

在特殊场景可能会用到,大多数情况下,用不到。但是你要知道静态方法,面试必考。


静态方法不一定放到类的最下面,它可以放到任意位置。


总结:

静态方法只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。



--结束END--

本文标题: python 面向对象之静态方法

本文链接: https://lsjlt.com/news/179035.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python 面向对象之静态方法
    通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不...
    99+
    2023-01-30
    静态 面向对象 方法
  • python 面向对象之多态
    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。那么,多态的...
    99+
    2023-01-30
    面向对象 多态 python
  • python 面向对象之类方法
    类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量举个例子class Dog(object):     def __i...
    99+
    2023-01-30
    面向对象 方法 python
  • java面向对象之多态
    多态的简单理解:student类继承了Person类,则student类的对象既是student又是person类多态性具有两种展现的形式:1.方法的多态性:(1)方法的重载:同一个方法可以根据传入的参数的类型或者个数的不同实现不同的功能(...
    99+
    2019-03-28
    java入门 java 面向对象 多态
  • Java面向对象之如何实现静态内部类
    小编给大家分享一下Java面向对象之如何实现静态内部类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!public class InnerCla...
    99+
    2023-06-02
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • Python面向对象之类和对象
    目录类定义类定义类和属性类中方法对象方法(普通方法)类方法静态方法魔术方法对象创建对象对象属性总结 类 定义类 所有类名首字母要求大写,多个单词时遵循驼峰命名法 所...
    99+
    2024-04-02
  • python面向对象之反射和内置方法
    一、静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和...
    99+
    2023-01-31
    反射 面向对象 方法
  • Java 面向对象 之 封装方法
    转载于 : http://www.verejava.com/id=16992728331734 public class Encapsulation {public static&...
    99+
    2023-06-02
  • python 面向对象之继承
    文章目录 前言继承的概念单继承多继承子类重写父类的同名方法和属性子类调用父类同名的方法和属性多层继承私有权限 前言 前面我们已经学习了 python 面向对象的类和对象,那么今天我将为大...
    99+
    2023-09-01
    python 开发语言
  • python 面向对象之变量
    类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。实例变量:定义在方法中的变量,只作用于当前实例的类。类变量的用途?大家公共的属性,节省开销看下面一段代码class Role...
    99+
    2023-01-30
    变量 面向对象 python
  • python之初始面向对象
    1. 初识面向对象   面向过程:     一切以事务的发展流程为中心.   面向对象:     一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 2. 类. 对象 ...
    99+
    2023-01-30
    面向对象 python
  • python之成员(面向对象)
    1. 成员   在类中你能写的所有内容都是类的成员    class Person: def __init__(self, name, gender): self.name = name # 成员...
    99+
    2023-01-30
    面向对象 成员 python
  • python之路day06 面向对象
    面向对象(你就是上帝): 世间万物,皆可分类 世界万物,皆为对象 https://www.cnblogs.com/alex3714/articles/5188179.html 面向对象编程 OOP编程是利用“类”和“对象”来创建各种模型来...
    99+
    2023-01-30
    之路 面向对象 python
  • python面向对象之反射
    一、静态方法(staticmethod)和类方法(classmethod)类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属×××互(也就是可以使用类属性)静态方法:让类里的方法直接被类调用,就像正常调用函数一样类方法和静态方...
    99+
    2023-01-31
    反射 面向对象 python
  • Java面向对象之多态的用法示例
    小编给大家分享一下Java面向对象之多态的用法示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!public class Polymorphi...
    99+
    2023-06-02
  • Java全面分析面向对象之多态
    目录多态的理解向上转型向上转型的三种形式动态绑定和静态绑定方法的重写进一步认识和理解多态多态的优点多态的理解 什么是多态呢??从字面理解就是多种形态,也就是不同类实例化出来的对象调用...
    99+
    2024-04-02
  • Python面向对象之入门类和对象
    目录什么是面向对象编程?定义类,从具体代码来感受吧!多个类和对象的观察补充一下类的属性(数据部分)总结什么是面向对象编程? 我们是不是听过面向过程,拿来放在一起对比就比较好理解了。 ...
    99+
    2024-04-02
  • python面向对象基础之常用魔术方法
    目录一、类和对象二、魔法方法三、理解self四、练习对战一、类和对象 通俗理解:类就是模板,对象就是通过模板创造出来的物体 类(Class)由3个部分构成: 类的名称: 类名 类的...
    99+
    2024-04-02
  • Java 面向对象 之 多态实例2
    转载于 : http://www.verejava.com/id=16992846385655 public class Polymorphism3 {public static&...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作