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

嗯哼哼

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. elasticSearch请求流程图

  2. 记一次MongoDB性能问题

    下面文章转载自火丁笔记,原作者描述了一次MongoDB数据迁移过程中遇到的性能问题及其解决方案,中间追查问题的方法和工具值得我们学习.下面是其原文: 最近忙着把一个项目从MySQL迁移到MongoDB ...

  3. 记自己的hexo个人博客

    https://othercoding.github.io/

  4. asp.net5中使用NLog进行日志记录

    asp.net5中提供了性能强大的日志框架,本身也提供了几种日志记录方法,比如记录到控制台或者事件中等,但是,对大部分程序员来说,更喜欢使用类似log4net或者Nlog这种日志记录方式,灵活而强大. ...

  5. small zhishi

    \\192.168.1.201\d$\Data 访问远程计算机文件资源管理器

  6. .net编程知识点

    一.编程思想 OOP(面向对象) 面向对象三大特性(多态如何体现)及五项原则 AOP(面向切面编程) 面向切面编程静态植入和动态植入 二.c#23种设计模式 三.Castle是针对.NET平台的一个开 ...

  7. python学习(六)--正则的一些例子

    import re #正则表达式#compile函数,--将正则表达式转变为内部函数,提高执行效率strr = "python123456"pattern = "Pyth ...

  8. 百度云BCC 上的Ubuntu 16.04 LTS - 升级内核到4.14.87

    99元1年,整来玩玩. =============================================================== 重点是这个libssl1.1的deb,安装上了之 ...

  9. VS2015自定义类模板的方法

    在前一段时间忽然想给自己电脑上的vs新建类的时候添加一个自定义个注释,但是在网上搜了很久都是说vs2012之类的方法系统也都是win7.XP之类的独独没有win8的.故此自己不断的尝试修改发现方法如下 ...

  10. Java Socket, DatagramSocket, ServerSocketChannel io代码跟踪

    Java Socket, DatagramSocket, ServerSocketChannel这三个分别对应了,TCP, udp, NIO通信API封装.JDK封装了,想跟下代码,看下具体最后是怎么 ...