一: 绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数传入
 1. 绑定给对象的方法: 类中定义的函数默认就是绑定给对象的
 2. 绑定给类的方法: 为类中定义的函数加上一个装饰器classmethod 

 

二: 非绑定方法: 既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,没有自动传值的效果

 

class Foo:
   def f1(self):
     print(self)

   @classmethod
   def f2(cls):
     print(cls)

   @staticmethod
   def f3(x,y):
     print('f3',x+y)


 obj=Foo()
 print(Foo.f2)
 Foo.f2()
 print(obj.f2)
 obj.f2()

 print(Foo.f3)
 print(obj.f3)

 Foo.f3(1,2)
 obj.f3(3,4)
# 应用
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('<id:%s ip:%s port:%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()

 

# obj1=MySql('1.1.1.1',3306)
# obj1.tell_info()
obj2 = MySql.from_conf()
obj2.tell_info()

 

posted on 2019-02-21 21:19  Andy_ouyang  阅读(123)  评论(0编辑  收藏  举报