Python中的实例方法,静态方法和类方法:重要区别

一旦进入面向对象的编程(OOP),Python方法通常会造成混乱。本指南介绍了Python中的三种主要方法。

Python中的三种方法

Python中有三种方法:实例方法静态方法类方法

知道基本的Python脚本并非总是需要区别,但是一旦进入OOP ,差异可能会带来很大的改变。

如果您是Python的新手,或者只是想尝试而无需安装任何东西,请确保您访问了这些在线交互式Python shell。

开始之前:了解装饰器模式

在查看差异之前,了解称为装饰器模式或简称为的设计模式很重要。装饰器

装饰器听起来很复杂,但没有什么可担心的。装饰器只是简单的功能。您可以自己编写它们,也可以使用库或Python标准库中包含的内容。

就像任何函数一样,装饰器执行任务。此处的区别是装饰器应用逻辑或更改其他功能的行为。它们是重用代码的绝佳方法,并且可以帮助将逻辑分离为个人关注的问题。

装饰器模式是Python定义静态方法或类方法的首选方法。这是在Python中的样子:

class DecoratorExample:  """ Example Class """  def __init__(self):    """ Example Setup """    print('Hello, World!')  @staticmethod  def example_function():    """ This method is decorated! """    print('I\'m a decorated function!') de = DecoratorExample()de.example_function()

装饰器必须紧接在函数或类声明之前。它们以 @ 符号开头,与普通方法不同,除非传入参数,否则不必在最后加上括号。

可以组合多个装饰器,编写自己的代码,并将它们也应用于类,但是对于这些示例,您无需执行任何操作。

Python中的实例方法

实例方法是Python类中最常见的方法类型。之所以这样称呼它们,是因为它们可以访问其实例的唯一数据。如果您有两个对象分别是通过汽车类创建的,则它们每个都可能具有不同的属性。它们可能具有不同的颜色,引擎大小,座位等。

实例方法必须具有 self 作为参数,但是您不必每次都传递此参数。 。 Self是另一个Python特殊术语。在任何实例方法中,您都可以使用self访问类中可能存在的任何数据或方法。

最后,由于实例方法是最常见的方法,因此不需要装饰器。除非您另行告诉Python,否则您创建的任何方法都会自动创建为实例方法。

以下是示例:

class DecoratorExample:  """ Example Class """  def __init__(self):    """ Example Setup """    print('Hello, World!')    self.name = 'Decorator_Example'  def example_function(self):    """ This method is an instance method! """    print('I\'m an instance method!')    print('My name is ' + self.name) de = DecoratorExample()de.example_function()

可以访问 name 变量通过自己。请注意,调用 example_function 时,您不必传递self-Python会为您进行自我传递。

Python中的静态方法

静态方法是在某种程度上与类相关的方法,但不需要访问任何特定于类的数据。您不必使用 self ,甚至不需要实例化实例,只需调用您的方法即可:

class DecoratorExample:  """ Example Class """  def __init__(self):    """ Example Setup """    print('Hello, World!')   @staticmethod  def example_function():    """ This method is a static method! """    print('I\'m a static method!') de = DecoratorExample.example_function()

@staticmethod 装饰器用于告诉Python该方法是静态方法。

静态方法对于实用程序功能非常有用,它们可以独立执行任务。他们不需要(也不能)访问班级数据。它们应该是完全独立的,并且只能与作为参数传入的数据一起使用。您可以使用静态方法将两个数字加在一起,或打印给定的字符串。

Python中的类方法

类方法是要知道的第三种也是最后一种OOP方法类型。类方法知道其类。它们无法访问特定的实例数据,但是可以调用其他静态方法。

类方法不需要 self 作为参数,但是它们确实需要名为< strong> cls 。这代表 class ,与self一样,它会自动由Python传递。

Class方法是使用 @classmethod 装饰器创建的。

class DecoratorExample:  """ Example Class """  def __init__(self):    """ Example Setup """    print('Hello, World!')   @classmethod  def example_function(cls):    """ This method is a class method! """    print('I\'m a class method!')    cls.some_other_function()  @staticmethod    def some_other_function():    print('Hello!') de = DecoratorExample()de.example_function()

类方法可能是这三种方法中比较混乱的方法类型,但是它们确实有其用途。类方法可以操纵类本身,这在处理更大,更复杂的项目时非常有用。

何时使用每种方法类型

这似乎很困难,而且在Python中的方法类型之间做出艰难的抉择,但是很快您就会通过一些实践来掌握它。

即使您只是为了编写有趣的小脚本而学习Python的另一种OOP功能是一项非常棒的技能,可以帮助您简化代码的故障排除和将来的重用。

总结:

  • 实例方法:最常见的方法类型。能够访问每个实例唯一的数据和属性。
  • 静态方法:无法访问该类中的其他任何内容。完全独立的代码。
  • 类方法:可以访问类中的有限方法。可以修改类的特定详细信息。
  • 如果本教程有点高级,或者与您所寻找的不完全相同,那么为什么不看一下这些从Python初学者到专业人士的课程呢?

    标签: 编程 Python