类和对象的绑定方法和非绑定方法

类中定义的方法大致可以分为两类:绑定方法和非绑定方法。其中绑定方法又可以分为绑定到对象的方法和绑定到类的方法。

一、绑定方法

对象的绑定方法/类的绑定方法

1.1 对象的绑定方法

在类中没有被任何装饰器修饰的方法就是 绑定到对象的方法,这类方法专门为对象定制。

通常说的绑定方法都是对象的绑定方法,因为类创建时默认就是对象的绑定方法。

当对象调用时,不需要传递第一个参数。

1.2 类的绑定方法

类中使用 @classmethod 修饰的方法就是绑定到类的方法。这类方法专门为类定制。通过类名调用绑定到类的方法时,会将类本身当做参数传给类方法的第一个参数

类的绑定方法,也可以由对象来调

class Person:
    def __init__(self,name,age):
        print(self)
        self.name=name
        self.age=age
    @classmethod	# 使用 @classmethod 装饰器,变为类的绑定方法
    def test(cls):
        print(cls)
        print('类的绑定方法')
        #类实例化产生对象,返回
        return cls('lqz',19)

# 使用类绑定方法
per1=Person.test()

# 通过对象调用类绑定方法
per2=Person('xc',18)
per2.test()

1.3 类的绑定方法用在什么地方?

不需要通过对象,只需要通过类就能完成某些事的时候,就把该方法定义为类的绑定方法

二、非绑定方法(静态方法)

在类内部使用 @staticmethod 修饰的方法即为非绑定方法,这类方法和普通定义的函数没有区别,不与类或对象绑定,谁都可以调用,且没有自动传值的效果

静态方法不属于任何人的绑定方法,就是个普通函数。但是别人一样可以使用

class Person:
    def __init__(self,name, age):
        self.id=self.get_uuid()
        self.name = name
        self.age = age

    #当成一个普通函数,只不过是写在类内部的
    @staticmethod
    def static_method():
        print('我是静态方法,谁都不绑定')
        
    @staticmethod
    # 生成一个唯一的id号
    def get_uuid():
        import uuid
        return uuid.uuid4()
    
# 类来调用静态方法
Person.static_method()

# 对象来调用静态方法
p=Person('xc',19)
p.static_method()

2.1 非绑定方法用在什么地方?

当这个方法,跟类和对象都没有关系的时候,可以定义成静态方法,一般在类内部使用,类外部也可以使用

就是一个普通函数,想把它拿到类中管理,就可以定义成静态方法

posted @ 2019-08-29 14:58  正在学习的Barry  阅读(218)  评论(0编辑  收藏  举报
-->