坚持把梳理的知识都给记下来.......

嗯哼哼

1.绑定方法与非绑定方法

在类内部定义的函数,分为两大类:

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

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

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

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

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

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

class Foo:
def __init__(self, name):
self.name = name # 绑定到对象的方法:没有被任何装饰器装饰的方法。
def tell(self):
print("name is :%s" % self.name) # 绑定到类的方法,用classmethod装饰器装饰的方法。
@classmethod
def fun1(cls): # cls = Foo
print(cls) # 非绑定方法: 用staticmethod装饰器装饰的方法
@staticmethod
def fun2(x, y):
return x+y f = Foo("Astro")
f.tell() # name is :Astro Foo.fun1() # <class '__main__.Foo'> 会将类作为第一个参数传入
f.fun1() # <class '__main__.Foo'> 其实类也可以调用绑定到类的方法,但是会将类作为第一个参数传入 # 非绑定方法 不与类或对象绑定,类和对象都可以调用
print(Foo.fun2(1, 2)) # 3
print(f.fun2(3, 4)) # 7


2.绑定方法与非绑定方法使用场景

settings.py :

name = "gd"
age = 19
sex = 'boy'

import settings as st
import hashlib
import time
class People:
def __init__(self, name, age, sex):
self.id = self.create_id()
self.name = name
self.age = age
self.sex = sex def tell_info(self):
print("Name:%s Age:%s Sex:%s" % (self.name, self.age, self.sex)) @classmethod
def from_conf(cls):
obj = cls(
st.name,
st.age,
st.sex
)
return obj @staticmethod
def create_id():
m = hashlib.md5(str(time.time()).encode("utf-8"))
return m.hexdigest() p = People('Astro', 20, 'boy') # 绑定给对象,就应该由对象来调用,自动将对象本身当做第一个参数传入
p.tell_info() # Name:Astro Age:20 Sex:boy # 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入
p2 = People.from_conf()
p2.tell_info() # Name:gd Age:19 Sex:boy # 绑定方法,不与类和对象绑定,谁都可以调用,没有传值一说
p3 = People('Nurato', 20, 'boy')
print(p3.id) # d8ddce8d1ce05f1fcb19c97dba33cb45

Python—面向对象04 绑定方法的更多相关文章

  1. Python面向对象04 /封装、多态、鸭子类型、类的约束、super

    Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...

  2. python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property

    一.面向对象绑定方法 一.类中定义的函数分成两大类 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 ...

  3. Python——面向对象、绑定对象、组合

    1. 面向过程VS面向对象 (1)面向过程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂 ...

  4. Python面向对象之内置方法

    1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, s ...

  5. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  6. python 类的绑定方法和非绑定方法

    一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __ ...

  7. 全面解析python类的绑定方法与非绑定方法

    类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...

  8. Python面向对象之魔术方法

    __str__ 改变对象的字符串显示.可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法 class Student: def __init__(self, name, a ...

  9. Python - 面向对象编程 - 魔术方法(双下划线方法)

    什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...

随机推荐

  1. Nginx启动关闭和重启、文档直接下载不阅览

    nginx启动相关 启动:sbin/nginx -c conf/nginx.conf 关闭:sbin/nginx -s stop 重启(重新加载配置文件):sbin/nginx -s reload 检 ...

  2. Springboot - 自定义错误页面

    Springboot 没找到页面或内部错误时,会访问默认错误页面.这节我们来自定义错误页面. 自定义错误页面 1.在resources 目录下面再建一个 resources 文件夹,里面建一个 err ...

  3. 测试UTC时间可以用的网址

    需要FQ的网址 https://time.artjoey.com/cn/ 不需要FQ的网址 https://time.is/ http://time.123cha.com/?q=Minsk

  4. bootstrap dialog对话框,完成操作提示框

    1. 依赖文件: bootstrap.js bootstrap-dialog.js bootstrap.css bootstrap-dialog.css 2.代码 BootstrapDialog.co ...

  5. Java集合篇一:ArrayList

    package com.test.collection; /** * 自定义ArrayList容器 * * 1.实现原理:底层封装数组 * * 2.查询 * LinkList 相较 ArrayList ...

  6. Css:Conditional comments 条件注释

    http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx http://www.quirksmode.org/css/condcom.h ...

  7. 常见的media断点

    landscape mode是指宽度比高度宽的模式,也就是俗称的宽屏模式: portrait mode是指高度比宽度高的模式,也就是俗称的竖屏模式: /*#region SmartPhones */ ...

  8. ArcGIS图框工具5.2发布,支持ArcGIS10.0,10.110.2,支持国家2000坐标系

    ArcGIS图框工具5.2发布,支持ArcGIS10.0,10.110.2,支持国家2000坐标系 下载地址http://files.cnblogs.com/gisoracle/atktoolnew. ...

  9. AngularJs整合ui-bootstrap以及ui-grid

    1. ui-bootstrap 参考博客:  http://www.cnblogs.com/pilixiami/p/5597634.html  (这篇博客写的非常不错,值得推荐) angular-ui ...

  10. 用ESP8266 WIFI模块连接服务器,并实现与服务器相互通讯

    最近在做一个智能锁的项目,该项目要求实现在任何地方(当然是要有网络的)可以在手机上用APP开锁.而我负责的部分主要是实现底层与服务器连接,并且要能相互通讯.考虑了很多问题,最终选择了用ESP8266 ...