绑定方法与非绑定方法介绍

发布时间:2024年01月03日

【 一 】绑定方法

  • 绑定给谁,谁来调用就自动将它本身当作第一个参数传入

【 1 】绑定到类的方法

????????绑定到类的方法是指与类本身关联的方法,而不是与实例对象关联的方法。这些方法在类级别上操作数据,而不需要访问或修改特定实例对象的属性。

????????在Python中,我们可以使用@classmethod装饰器来定义绑定到类的方法。绑定到类的方法在定义时必须接受一个额外的参数,通常被约定为cls,表示类本身。

( 1 )绑定到类的方法:

  • 用classmethod装饰器装饰的方法。

  • 为类量身定制

  • 类.boud_method(),自动将类当作第一个参数传入

  • (其实对象也可调用,但仍将类当作第一个参数传入)

class Circle:
    pi = 3.14

    def __init__(self,radius):
        self.radius = radius

    @classmethod
    def from_dian(cls, diameter):
        radius = diameter / 2
        return cls(radius)

    @classmethod
    def get_pi(cls):
        return cls.pi
# 使用绑定到类的方法创建实例对象
x = Circle.from_dian(10)
print(x.radius)# 5.0

# 调用绑定到类的方法
print(Circle.get_pi()) #3.14

?class.method()形式调用的方法也可以被称为类方法。使用这种方式调用方法时,Python会自动将类本身作为第一个参数传递给方法,并将其绑定为类方法。

  • 类.boud_method(),自动将类当作第一个参数传入

( 2 )绑定到对象的方法

  • 没有被任何装饰器装饰的方法

  • 为对象量身定制

  • 对象.boud_method(),自动将对象当作第一个参数传入

  • (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

【 二 】非绑定方法

  • 用staticmethod装饰器装饰的方法

  • 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。

  • 就是一个普通工具而已

????????非绑定方法是指既不与类本身关联,也不与类的实例对象关联的方法。这些方法具有完全独立的命名空间,它们只能通过实例对象来调用,并且在调用时并不会自动传递任何额外的参数。

????????在Python中,我们可以将一个方法定义为非绑定方法,只需要在定义时省略self参数即可。这种情况下,方法内部无法直接访问实例对象的属性或方法,但可以通过传递实例对象作为参数来操作。

????????实例:

class Math:
    def add(x,y):
        return x + y

    def subtract(x,y):
        return x - y

result = Math.add(2,6)
result1 = Math.subtract(6,2)

print(result)
print(result1)
# 8
# 4

????????需要注意的是,由于这些是非绑定方法,因此我们不能在方法内部使用self来访问实例对象的属性或方法。如果需要访问实例对象的属性或方法,我们可以将实例对象作为参数传递给非绑定方法。

【 四 】注意事项

????????绑定方法和非绑定方法并不等同于静态方法和动态方法。绑定方法和非绑定方法是与类和实例对象的关联性相关的概念,而静态方法和动态方法是与方法本身的调用方式和特性相关的概念。

  • 绑定方法:绑定方法是与类的实例对象关联的方法。在Python中,通常情况下,我们在类中定义的方法都是绑定方法。绑定方法会自动将实例对象作为第一个参数(通常命名为self)传递给方法。通过实例对象调用绑定方法时,实例对象会被自动传递给该方法,并绑定到第一个参数上,以便我们可以访问实例对象的属性和方法。

  • 非绑定方法:非绑定方法是既不与类本身关联,也不与类的实例对象关联的方法。这些方法具有完全独立的命名空间,只能通过实例对象来调用,并且在调用时不会自动传递任何额外的参数。

  • 静态方法:静态方法是在类中定义的方法,与类和实例对象没有直接的关联。静态方法不会自动传递类或实例对象作为参数,因此在静态方法内部无法访问类变量和实例变量。我们可以通过使用@staticmethod装饰器来声明静态方法。

  • 动态方法:动态方法是在类中定义的方法,与类的实例对象关联。动态方法会自动将实例对象作为第一个参数传递给方法,以便我们可以访问实例对象的属性和方法。我们可以通过使用@classmethod装饰器来声明动态方法,并使用cls作为第一个参数来引用类本身。

总结起来,绑定方法和非绑定方法是与类和实例对象的关联性相关的概念,而静态方法和动态方法是与方法本身的调用方式和特性相关的概念。

具体示例:

文章来源:https://blog.csdn.net/m0_58310590/article/details/135368007
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。