11、classmethod和staticmethod

类中定义的函数有两大类(3小种)用途,一类是绑定方法,另外一类是非绑定方法

1. 绑定方法:
特点:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数自动传入
1.1 绑定给对象的:类中定义的函数默认就是绑定对象的
1.2 绑定给类的:在类中定义的函数上加一个装饰器classmethod


2. 非绑定方法
特点: 既不与类绑定也不与对象绑定,意味着对象或者类都可以调用,但无论谁来调用都是一个普通函数,根本没有自动传值一说

class Foo:
    def func1(self):
        print('绑定给对象的方法',self)

    @classmethod
    def func2(cls):
        print('绑定给类的方法: ',cls)

    @staticmethod
    def func3():
        print('普通函数')
#
#
# obj=Foo()

# obj.func1()
# print(obj)

# Foo.func2()

# 绑定方法
# print(obj.func1)
# print(Foo.func2)

#非绑定方法
# print(obj.func3)
# print(Foo.func3)



import settings

class Mysql:
    def __init__(self,ip,port):
        self.id=self.create_id()
        self.ip=ip
        self.port=port

    def tell_info(self):
        print('%s:%s:%s' %(self.id,self.ip,self.port))

    @classmethod
    def from_conf(cls):
        return cls(settings.IP, settings.PORT)

    @staticmethod
    def create_id():
        import uuid
        return uuid.uuid4()

# obj=Mysql('1.1.1.1',3306)
# obj.tell_info()


obj1=Mysql.from_conf()

obj1.tell_info()
原文地址:https://www.cnblogs.com/z-x-y/p/10047535.html