python类的成员函数_注入一个python类成员函数
你在这里要做的是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类成员函数相关推荐
- python定义一个类描述数字时钟_定义一个时间类Time,能提供和设置由时、分、秒组成的时间,编写出应用程序,定义时间对象t...
展开全部 [基本题]定义一个时间类,提供设定时间.显示时间和秒数增加e68a8432313133353236313431303231363533313334336361371的功能,其中设定时间的方法 ...
- python的程序入口地址_第一个Python程序
在写代码之前,请千万不要用"复制"-"粘贴"把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需要一个字母一个字母地把代码自己敲进去,在敲代码的过程中, ...
- python去掉每行前面_第一个python去掉行号
(根据我在博客园上连载的四篇文章整理,见http://yanxy.cnblogs.com/,转载请注明出处)近两天内的目标是在我博的每个栏目发一篇文章,先都占个坑再说,空着不好看:) <程序设计 ...
- 苹果笔记本python开发第一个程序_第一个Python程序【文章来自老男孩】
首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on ...
- python 程序块 挂掉的服务_写一个python的服务监控程序
写一个python的服务监控程序 前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4. 到python站点下载源码.解压到Redhat上.然 ...
- python hello world程序代码_第一个Python程序——hello world
helloWorld 一直都是每一门语言经典的第一课, 就是使用那一种语言输出 HelloWorld 的字符串 下面 ,就用 python.在终端里面输出 HelloWorld 代码非常简单,只需要一 ...
- python统计大小写字母个数_编写一个Python函数,它接受一个字符串并计算大写字母和小写字母的数量...
问题why this one doesn't work? 除了语法错误和运行时错误之外,您的代码逻辑还有很长的路要走.你实际上没有按问题所问的去做.您似乎正在尝试计算单个字符中的大写字符数.那是不正确 ...
- python turtle绕原点旋转_每天一个Python小技巧,用Python 画个多啦A梦,小猪佩奇,文末还有Python入门学习视频
见网络上有人用Python 画出来个多啦A梦,很是新奇,来来来,我们看一下他们主要用到的库. 其实主要用的库就一个 turtle 库 先说明一下turtle绘图的基础知识: 1. 画布(canvas) ...
- python判断密码是否正确_第一个python程序-判断登陆用户名和密码是否正确
#setencoding=utf-8#用户名和密码输入正确,则登陆成功 #用户名正确密码错误,只再输入密码,有3次机会 #错误3次,则把用户名放入lock中 import os,sys #存放用户名和 ...
最新文章
- 第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotio...
- 2020年6月18日 618感言
- 深入剖析 iOS 编译 Clang LLVM(编译流程)
- 开源 java CMS - FreeCMS2.3会员个人资料
- HALCON示例程序classify_image_class_gmm.hdev使用GMM分类器分割彩色图片
- access month函数用法_小白进阶必备的10组函数公式实用技巧解读,有案例和详情解读哦!...
- POJ1039+几何+直线于线段相交
- (WPF)XAML 过程式代码
- “宽带中国、智慧岳阳”项目启动
- 32f4怎样同时采集两个adc_硬件-TI-ADC
- 全国区号省份mysql_中国各个省份的区号
- 有关爬虫浏览量的问题
- win10+centOS7双系统安装步骤记录
- 瑞萨单片机-硬件I2C从设备
- 浅谈C++中的多线程(一)
- miniconda3官网介绍
- java 汇编_大话+图说:Java 汇编指令——只为让你懂
- 跨时钟域同步-结绳法
- 关于 Swiper 的坑——只有3.3.1的非压缩版正常,非常奇怪
- 【环境安装】ubuntu18.04利用opam安装指定版本的coq工作环境
热门文章
- 【leetcode记录03】动态规划
- ABAP SAPGUI 里使用 F4 value help 选择时间
- SAP Spartacus UI 服务器端渲染的调试启动方式 - debug 模式
- SAP 电商云 Spartacus UI Quick Order 对应的 CMS 内容
- SAP Spartacus的开发人员来自全球各地
- Angular应用里的Template Reference变量
- year range in CRM Fiori Sales Pipeline
- Opportunity Sales org F4 value help data source
- 在线流程图绘制网站draw.io支持的三种存储介质
- Cloud for Customer系统里的附件url,可以通过partner编程自己生成么?