一、绑定方法与非绑定方法

1、绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入):

(1)绑定给对象的方法:在类内部定义的函数(没有被任何装饰器修饰的)默认就是绑定给对象用的。

(2)绑定给类的方法:在类内部定义的函数如果被装饰器@classmethod修饰,则是绑定给类的,应该由类来调用,

调用时将类作为第一个参数自动传入。

  绑定方法的精髓在于=========自动传值。

class Foo:
def f1(self): # 绑定给对象的方法
print('对象') @classmethod # 绑定给类的方法
def f2(cls):
print('绑定给类') obj=Foo() # 绑定给对象的方法,自动传入对象
obj.f1() # 绑定给类的方法,自动传值类
Foo.f2()

2、非绑定方法:类中定义的函数如果被@staticmethod装饰,那么该函数就变成非绑定方式,既不与类绑定,也不与对象绑定,意味着类与对象都可以调用,但只是作为一个普通函数,不会有自动传值的效果。

import settings

class MySql:
def __init__(self,ip,port):
self.ip=ip
self.port=port
self.id=id 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 creat_id():
import uuid
return uuid.uuid4() # obj1=MySql('127.0.0.1',3306)
# obj1.tell_info()
# obj2=MySql(settings.IP,settings.PORT)
obj2=MySql.from_conf()
obj2.tell_info()

3、注意点

非绑定方法与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说

最新文章

  1. SDN/NFV运营商商业化部署
  2. 如何在iOS9的plist文件中配置不使用https
  3. 文字对齐之text-align总结
  4. 编译python3
  5. linux时间设置相关
  6. Egret 双端接入爱贝支付遇到的问题
  7. java Socket使用注意
  8. 通过Transaction Log(fn_dblog)取回被删除的数据
  9. JSP实现页面跳转的方式
  10. ios隐藏键盘的方式简单应用
  11. 深入C#.NET数据类型
  12. JSP 基本语法
  13. yii2 使用指定数据库执行createCommand
  14. springBoot系列-->springBoot注解大全
  15. LHS 和 RHS----你所不知道的JavaScript系列(1)
  16. python environ PYTHON_EGG_CACHE
  17. Shell xargs
  18. SqlBulkCopy Precision Error from C# Double to Sql Decimal?
  19. Nolia 给CC添加过滤器
  20. Algorithmic Trading[z]

热门文章

  1. zz2017-2018年AI技术前沿进展与趋势
  2. 论文阅读笔记六十三:DeNet: Scalable Real-time Object Detection with Directed Sparse Sampling(CVPR2017)
  3. 求职-如何选择offer
  4. NOIP201110观光公交
  5. clickhouse安装 Requires: libstdc++.so.6(GLIBCXX_3.4.19)(64bit)
  6. [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索之二
  7. 推荐一款健康App 多喝水,引领全民时尚喝水生活习惯
  8. Java连载12-继承开发环境&long类型
  9. spring bean的三种管理方式·
  10. WindowsServer -------------部署软件