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

嗯哼哼

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. pat1013. Battle Over Cities (25)

    1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  2. 《Python编程从入门到实践》_第三章_列表简介

    什么是列表呢? 官方说明就是由一些列按特点顺序排列的元素组成.其实可以看出很多个字符串的有序组合吧,里面的内容可以随时的删除,增加,修改. 下面这个就是一个列表,python打印列表的时候会将中括号和 ...

  3. JS获取鼠标位置,兼容IE FF

    由于Firefox和IE等浏览器之间对js解释的方式不一样,firefox下面获取鼠标位置不能够直接使用clientX来获取.网上说的一般都是触发mousemove事件才行.我这里有两段代码,思路都一 ...

  4. 一分钟学会Git操作流程

    今天整理下公司操作git 流程,尽量用最最简洁的方式整理出来,方便以后有新来的同事学习使用. 我整理的这个Git操作,基本上只需要一分钟,就可以轻松上手啦!!! 一. 拉取提交操作 1.拉取远程代码 ...

  5. 【学习笔记】实用类String的基本应用即常用方法

    一.String类概述 在Java中,字符串被作为String类型的对象来处理. String类位于java.lang包中,默认情况下会自动导入到所有的程序中. 创建String对象的方法如下: St ...

  6. 移除script标签引起的兼容性问题

    一.应用场景: 有时候我们需要动态创建script标签实现脚本的按需加载,我们会为script标签绑定onload或者onreadystatechange事件,用于检测动态脚本是否加载并执行完毕,在事 ...

  7. 洛谷P4632 [APIO2018] New Home 新家(动态开节点线段树 二分答案 扫描线 set)

    题意 题目链接 Sol 这题没有想象中的那么难,但也绝对不简单. 首先把所有的询问离线,按照出现的顺序.维护时间轴来处理每个询问 对于每个询问\((x_i, y_i)\),可以二分答案\(mid\). ...

  8. Homebrew 的使用

    安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/ins ...

  9. Node.js 操作Mongodb

    Node.js 操作Mongodb1.简介官网英文文档  https://docs.mongodb.com/manual/  这里几乎什么都有了MongoDB is open-source docum ...

  10. k-近邻算法(kNN)

    1.算法工作原理 存在一个训练样本集,我们知道样本集中的每一个数据与所属分类的对应关系,输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应特征进行比较,然后算法提取样本集中特征最相似的数据( ...