【 一 】绑定方法
- 绑定给谁,谁来调用就自动将它本身当作第一个参数传入
【 1 】绑定到类的方法
绑定到类的方法是指与类本身关联的方法,而不是与实例对象关联的方法。这些方法在类级别上操作数据,而不需要访问或修改特定实例对象的属性。
在Python中,我们可以使用@classmethod
装饰器来定义绑定到类的方法。绑定到类的方法在定义时必须接受一个额外的参数,通常被约定为cls
,表示类本身。
( 1 )绑定到类的方法:
-
用classmethod装饰器装饰的方法。
-
为类量身定制
-
类.boud_method()
,自动将类当作第一个参数传入 -
(其实对象也可调用,但仍将类当作第一个参数传入)
class Circle:pi = 3.14def __init__(self,radius):self.radius = radius@classmethoddef from_dian(cls, diameter):radius = diameter / 2return cls(radius)@classmethoddef 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 + ydef subtract(x,y):return x - yresult = Math.add(2,6)
result1 = Math.subtract(6,2)print(result)
print(result1)
# 8
# 4
需要注意的是,由于这些是非绑定方法,因此我们不能在方法内部使用
self
来访问实例对象的属性或方法。如果需要访问实例对象的属性或方法,我们可以将实例对象作为参数传递给非绑定方法。
【 四 】注意事项
绑定方法和非绑定方法并不等同于静态方法和动态方法。绑定方法和非绑定方法是与类和实例对象的关联性相关的概念,而静态方法和动态方法是与方法本身的调用方式和特性相关的概念。
-
绑定方法:绑定方法是与类的实例对象关联的方法。在Python中,通常情况下,我们在类中定义的方法都是绑定方法。绑定方法会自动将实例对象作为第一个参数(通常命名为
self
)传递给方法。通过实例对象调用绑定方法时,实例对象会被自动传递给该方法,并绑定到第一个参数上,以便我们可以访问实例对象的属性和方法。 -
非绑定方法:非绑定方法是既不与类本身关联,也不与类的实例对象关联的方法。这些方法具有完全独立的命名空间,只能通过实例对象来调用,并且在调用时不会自动传递任何额外的参数。
-
静态方法:静态方法是在类中定义的方法,与类和实例对象没有直接的关联。静态方法不会自动传递类或实例对象作为参数,因此在静态方法内部无法访问类变量和实例变量。我们可以通过使用
@staticmethod
装饰器来声明静态方法。 -
动态方法:动态方法是在类中定义的方法,与类的实例对象关联。动态方法会自动将实例对象作为第一个参数传递给方法,以便我们可以访问实例对象的属性和方法。我们可以通过使用
@classmethod
装饰器来声明动态方法,并使用cls
作为第一个参数来引用类本身。
总结起来,绑定方法和非绑定方法是与类和实例对象的关联性相关的概念,而静态方法和动态方法是与方法本身的调用方式和特性相关的概念。
具体示例: