类中定义的函数分成两大类

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

  1. 绑定到类的方法:用classmethod装饰器装饰的方法。

         为类量身定制
    
         类.boud_method(),自动将类当作第一个参数传入
    
       (其实对象也可调用,但仍将类当作第一个参数传入)
  2. 绑定到对象的方法:没有被任何装饰器装饰的方法。

        为对象量身定制
    
        对象.boud_method(),自动将对象当作第一个参数传入
    
      (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)

二:非绑定方法:用staticmethod装饰器装饰的方法

  1. 不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

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

  

绑定方法

classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法

  

#settings.py
HOST='127.0.0.1'
PORT=3306
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port @classmethod
def from_conf(cls):
print(cls)
return cls(settings.HOST,settings.PORT) print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
conn=MySQL.from_conf() conn.from_conf() #对象也可以调用,但是默认传的第一个参数仍然是类

非绑定方法

在类内部用staticmethod装饰的函数即非绑定方法,就是普通函数

statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果

class MySQL:
def __init__(self,host,port):
self.id=self.create_id()
self.host=host
self.port=port
@staticmethod
def create_id(): #就是一个普通工具
m=hashlib.md5(str(time.time()).encode('utf-8'))
return m.hexdigest() print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看结果为普通函数

classmethod与staticmethod的对比

import settings
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port @staticmethod
def from_conf():
return MySQL(settings.HOST,settings.PORT) # @classmethod #哪个类来调用,就将哪个类当做第一个参数传入
# def from_conf(cls):
# return cls(settings.HOST,settings.PORT) def __str__(self):
return '就不告诉你' class Mariadb(MySQL):
def __str__(self):
return '<%s:%s>' %(self.host,self.port) m=Mariadb.from_conf()
print(m) #我们的意图是想触发Mariadb.__str__,但是结果触发了MySQL.__str__的执行,打印就不告诉你:

最新文章

  1. Proguard参数
  2. JSON和数据集互相转换单元
  3. 欧拉回路(hdu3018)
  4. C# 中正确实现 IDisposable 接口
  5. 从css3书写顺序引出来的border-radius参数
  6. jmeter断言
  7. Gmail新版截图曝光 你还能认得出来吗?
  8. BootStrap2学习日记2--将固定布局换成响应式布局
  9. JS,JQuery杂谈
  10. EF 接收OUTPUT参数的方法 How to Retrieve Stored Procedure Output Parameters in Entity Framework
  11. 获取 修改 CSS 样式
  12. 小谈SQL表的连接
  13. Python3 循环
  14. Git运用基础之如何删除Github上不想要的项目
  15. Integer简介
  16. poj 3641 快速幂
  17. ZOJ - 2423-Fractal
  18. nginx配置文件注释说明
  19. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)
  20. 【T10】记住,TCP__IP不是轮询的

热门文章

  1. [20181229]关于字符串的分配问题.txt
  2. [20181116]18c DML 日志优化.txt
  3. [20181007]12cR2 Using SQL Patch 2.txt
  4. 4. svg学习笔记-文档结构元素和样式的使用
  5. 联想x3650m5服务器安装windows2008R2系统
  6. 【2018.08.13 C与C++基础】网络通信:阻塞与非阻塞socket的基本概念及简单实现
  7. css点滴3—5种方式实现圆环
  8. keepalived 安装篇-个人实践-编译安装
  9. 轮播图插件swiper 的使用
  10. js 性能篇--dom 重绘 重排 节流