绑定方法与非绑定方法:

在类内部定义的绑定方法,分两大类:

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

 #!_*_ coding:utf-8 _*_

 #类中绑定方法分两种:绑定给谁,就由谁来调用.默认就把调用者当作第一个参数传进去.

 #1.绑定到对象的方法:没有被任何装饰器修饰的方法.
class F:
def __init__(self, name, age):
self.name = name
self.age = age def tell(self):
print("name is %s " % self.name)
#__init__ 和tell方法都是对象p的绑定方法 p = F("JACK", 18)
print(p.tell) # <bound method F.tell of <__main__.F object at 0x0044F9B0>>是一个绑定到F的方法. #2.绑定到类的方法:用classmethod装饰器修饰的方法.
class F:
def __init__(self, name, age):
self.name = name
self.age = age def tell(self):
print("name is %s " % self.name) @classmethod
def func(cls):
print("from cls bound") p = F("JACK", 18) print(F.func) # <bound method F.func of <class '__main__.F'>> 绑定到类的方法. #非绑定方法: class F:
def __init__(self, name, age):
self.name = name
self.age = age def tell(self):
print("name is %s " % self.name) @classmethod
def func(cls):
print("from cls bound") @staticmethod # 加了这个装饰器,就变成了一个类中的普通工具(函数),对象和类都可以调用
def func1(x,y):
print(x * y) p = F("JACK", 18) p.func1(5,7)
F.func1(9,8) # 类和对象都可以调用.正常传参数. class F:
def __init__(self, name, age):
self.name = name
self.age = age def tell(self):
print("name is %s " % self.name) @classmethod
def func(cls):
print("from cls bound") @staticmethod # 加了这个装饰器,就变成了一个类中的普通工具(函数),对象和类都可以调用
def func1(x,y):
return x * y p = F("JACK", 18) print(p.func1(5,7))
print(F.func1(9,8))

1.凡是类中的方法和函数,都是绑定给对象使用的;

2.绑定方法都有自动传值的功能。传递进去的值,就是对象本身。

3.如果类想调用绑定方法,就必须遵循函数的参数规则,有几个参数,就必须传递几个参数。

应用场景:

#!_*_ coding:utf-8 _*_
import settings
import time
import hashlib
class People:
def __init__(self, name, age, sex):
self.id = self.creat_id() #类调用了这个非绑定方法.
self.name = name
self.age = age
self.sex = sex def tell_info(self): # 绑定到对象的方法
print("Name is %s Aage is %s Sex is %s,ID is %s." % (self.name,self.age,self.sex, self.id) ) @classmethod
def from_settings(cls): # 绑定到类的方法
obj = cls(
settings.name,
settings.age,
settings.sex
)
return obj
@staticmethod
def creat_id(): # 非绑定方法,谁都可以调用
time.sleep(0.00000000000000001) # 加了细微的延时,不然生成的ID都一样
m = hashlib.md5()
m.update(bytes(str(time.time()),encoding="utf-8"))
return m.hexdigest() p = People("Lu", 20 ,"女")
p.tell_info() # 绑定给对象,就由对象来调用,把对象作为第一个参数传进去
p = People.from_settings() # 绑定给类,由类来调用,把类作为第一个参数传进去.
p.tell_info() p1 = People("Lucy", 18 ,"女")
p2 = People("Lili", 22 ,"女")
p3 = People("Luma", 38 ,"女")
print(p1.id)
print(p2.id)
print(p3.id)

Day 5-5 绑定方法与非绑定方法的更多相关文章

  1. Day7 子类调用父类的方法supper 绑定方法与非绑定方法

    supper:可以利用supper来重用父类的方法,可以不用指名道姓的调用了. class OldboyPeople: school = 'oldboy' def __init__(self,name ...

  2. Learning-Python【25】:绑定方法与非绑定方法

    类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...

  3. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  4. Python面向对象之封装、property特性、绑定方法与非绑定方法

    一.封装 ''' 1.什么封装 封:属性对外是隐藏的,但对内是开放的(对内是开放的是因为在类定义阶段这种隐藏已经发生改变) 装:申请一个名称空间,往里装入一系列名字/属性 2.为什么要封装 封装数据属 ...

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

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

  6. Python开发基础-Day21多态与多态性、绑定方法和非绑定方法

    多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...

  7. python基础之多态与多态性、绑定方法和非绑定方法

    多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...

  8. day22-类的封装、property特性以及绑定方法与非绑定方法

    目录 类的封装 两个层面的封装 第一个层面 第二个层面 封装的好处 私有模块 类的propertry特性 setter 和 deleter 类与对象的绑定方法与非绑定方法 类的封装 将类的属性或方法隐 ...

  9. 类的封装,property特性,类与对象的绑定方法和非绑定方法,

    类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你 ...

随机推荐

  1. JavaScript如何计算两个日期间的时间差

    <script type="text/javascript"> /* * 获得时间差,时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时:分钟:秒 * 其中 ...

  2. 设计模式のNullObjectPattern(空对象模式)----行为模式

    一.产生背景 在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查.Null 对象不是检查空值,而是反应一个不做任何动作的关系.这样的 Null 对象也可 ...

  3. Java学习笔记(三)——封装、继承、多态

    一.封装 概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 实现步骤: 修改属性的可见性——设为private. 创建getter/se ...

  4. [ZJOI2018]胖

    嘟嘟嘟 都说这题是送分题,但我怎么就不觉得的呢. 看来我还是太弱了啊-- 大体思路就是对于每一个设计方案,答案就是每一个关键点能更新的点的数量之和. 关键在于怎么求一个关键点能更新那些点. 首先这些点 ...

  5. 【js】横/纵向无缝滚动

    1.纵向无缝滚动(类似淘宝) ps:存在一个问题,当鼠标移入时,未关闭定时器 <!DOCTYPE html> <html> <head> <meta char ...

  6. SWIG 的应用(一)

    用 C/C++ 扩展 Python. - 如果仅使用标准 C 库函数,则可以使用 Python 自带的 ctypes 模块,或者使用 cffi. - 如果要使用自定义 C/C++ 函数,又不怕写 wr ...

  7. Uncaught ReferenceError: layer is not defined

    错误详细信息,如下: Uncaught ReferenceError: layer is not defined' 关键词就是not defined 未定义,那么解决方案就是给它定义. 原来的问题代码 ...

  8. shell去除换行和空格

    #!/bin/bash if [ -f str.txt ] ## 如果str.txt存在,则返回true then strval=$(cat str.txt|awk '{printf "%s ...

  9. devops工具-Ansible基础

    一.Ansible介绍 简介     Ansible使用Python语言开发,是一个配置管理型工具,与之类似的工具还有Puppet.SaltStack.chef等,默认通过SSH协议进行远程命令执行或 ...

  10. JVM-自动内存管理机制

    关于GC: 垃圾收集通常被称为"GC",经过半个世纪的发展,内存动态分配与内存回收技术已经相当成熟.那我们为何还要了解GC和内存分配呢? 当我们需要排除各种内存溢出.内存泄露问题时 ...