????????绑定到类的方法是指与类本身关联的方法,而不是与实例对象关联的方法。这些方法在类级别上操作数据,而不需要访问或修改特定实例对象的属性。
????????在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()
,自动将类当作第一个参数传入
没有被任何装饰器装饰的方法
为对象量身定制
对象.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
作为第一个参数来引用类本身。
总结起来,绑定方法和非绑定方法是与类和实例对象的关联性相关的概念,而静态方法和动态方法是与方法本身的调用方式和特性相关的概念。
具体示例: