`
liujun11
  • 浏览: 21157 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别

阅读更多

定义:

静态函数(@staticmethod): 即静态方法,主要处理与这个类的逻辑关联, 如验证数据;

类函数(@classmethod):即类方法, 更关注于从类中调用方法, 而不是在实例中调用方法, 如构造重载;

成员函数: 实例的方法, 只能通过实例进行调用;

 

class Foo(object):
    """类方法的三种语法形式"""

    def instance_method(self):
        print("是类{}的实例方法,只能被实例对象调用".format(Foo))

    @staticmethod
    def static_method():
        print("是静态方法")

    @classmethod
    def class_method(cls):
        print("是类方法")

foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()

由此看一看出来, 

实例方法只能被实例对象调用,静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。
实例方法,第一个参数必须要默认传实例对象。
静态方法,参数没有要求。
类方法,第一个参数必须要默认传类。

 

他们是怎么应用的;

比如日期的方法, 可以通过实例化(__init__)进行数据输出;

可以通过类方法(@classmethod)进行数据转换;

 

可以通过静态方法(@staticmethod)进行数据验证;

例子

class Date(object):  
  
    day = 0  
    month = 0  
    year = 0  
  
    def __init__(self, day=0, month=0, year=0):  //这个是通过实例进行数据输出的。
        self.day = day  
        self.month = month  
        self.year = year  
          
    def display(self):  
        return "{0}*{1}*{2}".format(self.day, self.month, self.year)  
     
    @classmethod  
    def from_string(cls, date_as_string):  //用类方法进行数据转换
        day, month, year = map(int, date_as_string.split('-'))  
        date1 = cls(day, month, year)  
        return date1  
     
    @staticmethod  
    def is_date_valid(date_as_string):  //这时候用静态方法进行对日期数据的验证。
        day, month, year = map(int, date_as_string.split('-'))  
        return day <= 31 and month <= 12 and year <= 3999  
      
date1 = Date('12', '11', '2014')  
date2 = Date.from_string('11-13-2014')  
print(date1.display())  //12*11*2014 
print(date2.display())  //11*13*2014  
print(date2.is_date_valid('11-13-2014'))  //False 
print(Date.is_date_valid('11-13-2014'))  //False 

 

 

 

 

分享到:
评论

相关推荐

    python-3.5函数手册html版.rar

    例如,`@classmethod`和`@staticmethod`装饰器分别用于创建类方法和静态方法,这两种方法与实例或类的关系不同,提供了不同的调用方式。 在函数定义上,Python 3.5引入了`asyncio`库,支持异步编程和协程。`async ...

    Python @函数装饰器及@staticmethod,@classmethod.docx

    除了通用的函数装饰器,Python 还提供了内置的装饰器 `@staticmethod` 和 `@classmethod`。 - **@staticmethod**:将一个方法标记为静态方法,意味着它不需要实例化对象就可以被调用。 - **@classmethod**:将一个...

    python-3.8.2-amd64.rar

    1. **类型注解增强**:Python 3.8引入了更多的类型注解功能,如`@classmethod`和`@staticmethod`的类型注解,使得代码更加清晰,有利于静态类型检查工具。 2. **位置参数和关键字参数的分离**:函数调用时,可以明确...

    python安装-08-静态方法.ev4.rar

    - 虽然静态方法与类方法都是类的方法,但它们之间有区别。 - 类方法(`@classmethod`装饰器)接收类作为第一个参数(通常命名为`cls`),可以访问类变量,但不能访问实例变量。 - 静态方法既不接收类也不接收实例...

    python-3.6.2-docs-pdf-a4

    - **类方法与静态方法**:除了实例方法外,Python还允许定义类方法(classmethod)和静态方法(staticmethod),为类和对象提供不同层次的操作。 5. **高级特性**: - **生成器**:Python的生成器允许在迭代过程...

    Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析

    在Python编程语言中,类方法、实例方法和静态方法是面向对象编程的重要组成部分。它们各自有不同的用途和调用方式,帮助我们更好地组织和管理代码。接下来我们将深入探讨这些概念及其用法。 首先,实例方法是类中最...

    python的staticmethod与classmethod实现实例代码

    `@staticmethod`装饰器使得函数成为类的一个静态成员,调用时不需传入任何实例或类引用。例如: ```python class MyClass: @staticmethod def static_method(x): print(x) ``` 在这个例子中,`MyClass.static_...

    python-3.7.5-docs-pdf-a4.zip

    类的方法可以定义为静态方法(`@staticmethod`)或类方法(`@classmethod`),以适应不同的场景。 Python的异常处理机制通过`try/except`语句来实现,允许开发者捕获并处理程序运行时可能出现的错误。`finally`块确保在...

    python-doc-27-34.rar_python_tu

    6. **面向对象编程**:Python 3中的类和继承的新特性,如类方法(@classmethod)和静态方法(@staticmethod)的使用。 7. **上下文管理器**:介绍with语句和自定义上下文管理器,用于资源的自动获取和释放。 8. **...

    详解Python中的静态方法与类成员方法

    ### Python中的静态方法与类成员方法详解 #### 前言 在Python编程语言中,类的方法有两种特殊的形式:静态方法(Static Method)和类成员方法(Class Method)。这两种方法在设计模式、类的设计以及代码复用方面...

    Python中staticmethod和classmethod的作用与区别

    要理解staticmethod和classmethod的作用与区别,首先需要了解Python中实例方法、静态方法和类方法的基本概念。 实例方法是定义在类中,并以self参数开头的方法。self参数代表的是类的实例对象,即每一个创建出来的...

    Stack-Overflow-About-Python-中文1

    通常,当我们定义一个类时,Python 使用 `type` 函数来创建这个类。元类允许我们自定义这个过程,可以修改类的行为或属性。元类主要用于高级编程,例如动态创建类、实现抽象基类或接口、以及控制属性的定义等。 ...

    python3.5.3.zip

    4. **新函数特性**:`@classmethod`和`@staticmethod`现在可以接受参数,这提供了一种更灵活的类方法定义方式。 5. **新的内置函数**:包括`ascii()`,用于返回对象的ASCII表示,不包含非ASCII字符;`sorted()`现在...

    深入Python类:静态方法与类方法的较量

    类中的方法可以根据其用途和功能分为几种类型,其中静态方法(`staticmethod`)和类方法(`classmethod`)是两种特别值得关注的方法类型。这两种方法虽然都是类的一部分,但它们的功能和使用场景有着明显的不同。 #...

    Python-3.5中文官网文档chm格式.zip

    5. **类和对象**:Python是面向对象的语言,3.5版本中,类的定义、属性、方法、继承、多态、私有成员(__private)、静态方法(@staticmethod)和类方法(@classmethod)等都有详尽的解释。 6. **模块和包**:...

    Python-经典面试题详解(共53题).pdf

    本文将详细解析《Python-经典面试题详解(共53题)》中的部分关键知识点,包括列表与元组的区别、字符串插值的方法、`is`与`==`的区别、装饰器的概念及应用、Range函数的用法、类的定义以及实例方法、静态方法和类方法...

    Python 高级函数实训

    ### Python高级函数实训知识点 #### 一、闭包与计算平方根 闭包是一种特殊的函数类型,它能够访问其外部作用域内的变量。在Python中,闭包通常由以下三个特征构成: 1. **存在于两个嵌套关系的函数中**:意味着...

    2018最新BAT-python面试题(内附答案)

    3. 静态方法(staticmethod)和类方法(classmethod): - 静态方法和类方法是Python中定义的两种特殊方法,它们允许我们定义与类相关但不依赖于类实例或类本身的方法。 - 静态方法不需要引用类或实例,可以直接...

    python面试题

    - 更多关于这个问题的讨论:[What is the difference between staticmethod and classmethod in Python?]...

    【Python-Web自动化-09课-Pytest高阶】

    使用`@classmethod`或`@staticmethod`定义类级别的fixture,而在模块文件中定义的fixture则对整个模块可见。 5. **集合与测试顺序** 默认情况下,Pytest按照文件、类、方法的顺序执行测试。通过`--collect-only`...

Global site tag (gtag.js) - Google Analytics