26 绑定方法与非绑定方法


一: 绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数传入
 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()

 


码神部落- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与码神部落立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者一念成空码神部落享有帖子相关版权。
3、码神部落管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者一念成空码神部落的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。

最新回复 (0)
    • 码神部落
      2
        立即登录 立即注册 GitHub登录
返回
发新帖
作者最近主题: