你在这里要做的是Child2.foo用self不是a的方法调用未绑定的方法Child2。

这是非法的,Python 2将检测到并提出一个TypeError解释错误的地方:TypeError: unbound method foo() must be called with Child1 instance as first argument (got Child2 instance instead)

在Python 3中,没有未绑定的方法对象; 未绑定的方法只是普通的旧函数。因此,他们无法检查您是否正在尝试做任何违法行为。然后,因为你实际上并没有使用方法内部的事实,self所以你可以逃脱它。Child2foo

但你不能注入实际使用的方法Child2的-ness Child2这种方式; 他们最终会提出一个TypeError或者说AttributeError错误的方法。它只适用于首先没有理由成为方法的方法。

如果你真的想在Python 2中使用这种行为,你可以通过从未绑定方法中提取函数来获得它:self.d['foo'] = Child1.foo.__func__

(如果你想使用更老的2.x,请使用im_func而不是__func__那里。)

现在,它根本不是一种方法 - 如果你试图将它实际上与self描述符协议绑定或者通过构建一个方法MethodType,你就会得到相同的旧方法TypeError。但它是一个函数,你可以用你想要的任何参数作为函数来调用它。而且,因为你的函数对self那个要求它的参数没有任何作用Child2,所以它会起作用。

虽然我们在这里,你几乎肯定想Parent在这里成为一个新式的课程。您可能希望在Python 2和Python 3中使用相同的代码,而不是在两者中使用相同行为的不同代码。所以:class Parent(object): # makes it a new-style class in 2.x as well as 3.x

def foo(self):

print("foo of class Parent: instance " + self.__class__.__name__)

def __init__(self):

self.d = {"foo": self.__class__.foo}

def bar(self):

self.d['foo'](self)

# Gets __func__ if it's an unbound method (2.x), leaves it alone if not (3.x)

self.d['foo'] = getattr(Child1.foo, '__func__', Child1.foo)

self.d['foo'](self)

class Child1(Parent):

def foo(self):

print("foo of class Child1: instance " + self.__class__.__name__)

class Child2(Parent):

pass

Child2().bar()

python类的成员函数_注入一个python类成员函数相关推荐

  1. python定义一个类描述数字时钟_定义一个时间类Time,能提供和设置由时、分、秒组成的时间,编写出应用程序,定义时间对象t...

    展开全部 [基本题]定义一个时间类,提供设定时间.显示时间和秒数增加e68a8432313133353236313431303231363533313334336361371的功能,其中设定时间的方法 ...

  2. python的程序入口地址_第一个Python程序

    在写代码之前,请千万不要用"复制"-"粘贴"把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中, ...

  3. python去掉每行前面_第一个python去掉行号

    (根据我在博客园上连载的四篇文章整理,见http://yanxy.cnblogs.com/,转载请注明出处)近两天内的目标是在我博的每个栏目发一篇文章,先都占个坑再说,空着不好看:) <程序设计 ...

  4. 苹果笔记本python开发第一个程序_第一个Python程序【文章来自老男孩】

    首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on ...

  5. python 程序块 挂掉的服务_写一个python的服务监控程序

    写一个python的服务监控程序 前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4. 到python站点下载源码.解压到Redhat上.然 ...

  6. python hello world程序代码_第一个Python程序——hello world

    helloWorld 一直都是每一门语言经典的第一课, 就是使用那一种语言输出 HelloWorld 的字符串 下面 ,就用 python.在终端里面输出 HelloWorld 代码非常简单,只需要一 ...

  7. python统计大小写字母个数_编写一个Python函数,它接受一个字符串并计算大写字母和小写字母的数量...

    问题why this one doesn't work? 除了语法错误和运行时错误之外,您的代码逻辑还有很长的路要走.你实际上没有按问题所问的去做.您似乎正在尝试计算单个字符中的大写字符数.那是不正确 ...

  8. python turtle绕原点旋转_每天一个Python小技巧,用Python 画个多啦A梦,小猪佩奇,文末还有Python入门学习视频

    见网络上有人用Python 画出来个多啦A梦,很是新奇,来来来,我们看一下他们主要用到的库. 其实主要用的库就一个 turtle 库 先说明一下turtle绘图的基础知识: 1. 画布(canvas) ...

  9. python判断密码是否正确_第一个python程序-判断登陆用户名和密码是否正确

    #setencoding=utf-8#用户名和密码输入正确,则登陆成功 #用户名正确密码错误,只再输入密码,有3次机会 #错误3次,则把用户名放入lock中 import os,sys #存放用户名和 ...

最新文章

  1. 第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotio...
  2. 2020年6月18日 618感言
  3. 深入剖析 iOS 编译 Clang LLVM(编译流程)
  4. 开源 java CMS - FreeCMS2.3会员个人资料
  5. HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片
  6. access month函数用法_小白进阶必备的10组函数公式实用技巧解读,有案例和详情解读哦!...
  7. POJ1039+几何+直线于线段相交
  8. (WPF)XAML 过程式代码
  9. “宽带中国、智慧岳阳”项目启动
  10. 32f4怎样同时采集两个adc_硬件-TI-ADC
  11. 全国区号省份mysql_中国各个省份的区号
  12. 有关爬虫浏览量的问题
  13. win10+centOS7双系统安装步骤记录
  14. 瑞萨单片机-硬件I2C从设备
  15. 浅谈C++中的多线程(一)
  16. miniconda3官网介绍
  17. java 汇编_大话+图说:Java 汇编指令——只为让你懂
  18. 跨时钟域同步-结绳法
  19. 关于 Swiper 的坑——只有3.3.1的非压缩版正常,非常奇怪
  20. 【环境安装】ubuntu18.04利用opam安装指定版本的coq工作环境

热门文章

  1. 【leetcode记录03】动态规划
  2. ABAP SAPGUI 里使用 F4 value help 选择时间
  3. SAP Spartacus UI 服务器端渲染的调试启动方式 - debug 模式
  4. SAP 电商云 Spartacus UI Quick Order 对应的 CMS 内容
  5. SAP Spartacus的开发人员来自全球各地
  6. Angular应用里的Template Reference变量
  7. year range in CRM Fiori Sales Pipeline
  8. Opportunity Sales org F4 value help data source
  9. 在线流程图绘制网站draw.io支持的三种存储介质
  10. Cloud for Customer系统里的附件url,可以通过partner编程自己生成么?