我们知道python的函数是描述符,unbound method和bound method都是instancemethod类型,是通过函数的__get__方法返回的。还有类方法classmethod也是instancemethod类型的。instancemethod用im_class,im_self和im_func保存了方法调用的相关信息。静态方法staticmethod其实返回的就是函数本身。知道了这些之后可以自己用python来做个这些函数或方法的实现。
# -*- coding:utf-8 -*- #
class FunWrap(object):
u"""包装一个函数"""
def __init__(self, func):
self.func = func
def __get__(self, obj, typ = None):
return szhinstancemethod(typ, obj, self)
def __call__(self, *args):
return self.func(*args)
def __getattr__(self, name):
return getattr(self.func, name)
class szhinstancemethod(object):
u"""模拟instancemethod"""
def __init__(self, im_class, im_self, im_func):
self.im_class = im_class
self.im_self = im_self
self.im_func = im_func
def __call__(self, *args):
if not self.im_self:
raise TypeError, "unbound method " + self.im_funcw.func_name + \
"() must be called with " + \
(self.im_class.__name__ if self.im_class else '?') + " instance"
return self.im_func(self.im_self, *args)
def __repr__(self):
if not self.im_self:
return '<unbound method ' + (self.im_class.__name__ if self.im_class else '?') \
+ "." + self.im_func.func_name + "> __szh"
else:
return '<bound method ' + (self.im_class.__name__ if self.im_class else '?') \
+ "." + self.im_func.func_name + " of " + str(self.im_self) + "> __szh"
class szhclassmethod(object):
u"""模拟classmethod"""
def __init__(self, func):
self.func = func
def __get__(self, obj, typ = None):
typ = typ or type(obj)
return szhinstancemethod(type(typ), typ, self.func)
class szhstaticmethod(object):
u"""模拟staticmethod"""
def __init__(self, func):
self.func = func
def __get__(self, obj, typ = None):
return self.func
if __name__ == '__main__':
class A(object):
@FunWrap
def f(self):
print 'test method ' + str(self)
@szhclassmethod
@FunWrap
def clsf(cls):
print 'test class method ' + str(cls)
@szhstaticmethod
@FunWrap
def staf():
print 'test static method'
a = A()
a1 = A()
print u"实例a访问方法f",a.f
print u"实例a1访问方法f",a1.f
print u"类A访问方法f",A.f
a.f()
a1.f()
print u"实例a访问类方法clasf",a.clsf
print u"类A访问类方法clasf",A.clsf
A.clsf()
a.clsf()
print u"实例a访问静态方法staf",a.staf
print u"类A访问静态方法staf",A.staf
a.staf()
分享到:
相关推荐
matlab 实现格林函数在时间域与频率域的模拟
本项目通过MATLAB实现Parzen窗模拟正态函数,旨在让学生掌握这种技术的基本原理和应用。 首先,我们要理解Parzen窗的基本概念。Parzen窗方法是通过在数据点周围放置一个窗口(通常是高斯窗口,即正态分布),然后对...
这个函数是不可计算的,也就是说,它不能通过有限步骤的算法来解决,但是可以通过其他方法如迭代或堆栈来模拟其计算过程。 阿克曼函数通常定义为三个参数的函数A(m, n, p),其中m、n、p是非负整数。它的基本形式...
Qt使用鼠标模拟函数mouse_event和按键模拟函数keybd_even实现网页刷新功能 https://blog.csdn.net/qq_29542611/article/details/83421552
模拟退火算法是一种启发式搜索方法,源自固体物理中的退火过程,被广泛应用于解决优化问题,特别是寻找全局最优解。在本主题中,我们将详细探讨如何使用模拟退火算法来寻找函数的最大值。 首先,我们需要理解模拟...
堆栈允许我们模拟函数调用的“返回”行为,而无需实际的递归调用。此外,堆栈的插入和删除操作通常比其他数据结构(如队列)更快,这对于处理大量计算的高阶阿克曼函数很有帮助。 ### 计算复杂性 阿克曼函数的增长...
《模拟函数信号发生器》 在工科教育中,模拟函数信号发生器是不可或缺的工具,尤其对于信息与控制工程学院的学生来说,它能够帮助学生深入理解正弦波、三角波、矩形波等基本信号的产生原理。本文将重点讨论使用ICL ...
总结,MATLAB为实现和研究势函数提供了丰富的工具和功能。通过定义势函数、绘图、数值计算以及模拟,我们可以深入理解这些概念并将其应用于实际问题中。无论是基础的物理学分析,还是复杂的工程计算,MATLAB都是一个...
总结起来,`unwrap`函数在C/C++中的实现需要理解其核心逻辑,即检测和修正相位跳跃。通过编写这样的代码,我们可以加深对周期性相位处理的理解,同时锻炼C/C++编程技巧。在实际项目中,这样的函数可以集成到更复杂的...
总之,通过MATLAB自编程实现模拟退火算法求解函数最小值,不仅可以加深对算法的理解,还能锻炼编程和问题解决能力。实验过程中,通过对参数的调整和观察,我们可以更好地掌握模拟退火算法的工作机制,进一步提升优化...
本文将详细介绍桩函数和驱动函数的概念、作用和使用方法,并通过一个实际的例子来演示如何使用桩函数和驱动函数来实现单元测试。 桩函数(Stub) 桩函数是一种特殊的函数,它可以模拟真实函数的行为,以便在测试中...
《模拟函数发生器的制作方法及有关理论》 在电子技术领域,函数发生器是一种重要的设备,用于产生不同类型的电信号,如正弦波、矩形波和三角波,广泛应用于无线电通信、测量和自动化控制等领域。本文主要探讨了如何...
6. **库函数的使用**:掌握如何在程序中引入和调用库文件中的函数,理解每个函数的功能和使用方法。 通过深入理解和实践这些知识点,用户可以更好地利用S7-200 SMART PLC的模拟量处理功能,完成复杂的工业自动化...
电路设计方案设计部分详细介绍了电路设计的原理和方法,包括方波发生电路、方波—三角波转换电路、三角波—正弦波转换电路等。 电路仿真部分使用了相应的仿真软件对电路进行了仿真,仿真结果表明了电路的正确性和...
`liemtt`和`simpleo2t`可能是两种不同的实现方式或者优化策略,可能分别对应一元函数和多元函数的优化方法。`liemtt`可能是一个作者的缩写,而`simpleo2t`可能是算法的一种特定版本或特定优化任务的简写。 在使用...
C语言模拟猜数字游戏程序(函数整体实现全部)。
在MATLAB环境中,计数过程和分段恒定函数的模拟是两个重要的概念,它们广泛应用于数据分析、系统建模...实际应用中,我们需要结合具体的业务场景和数学模型,灵活运用MATLAB的各种工具和函数,以实现精确的模拟和分析。
5个strnig函数的模拟实现
总结来说,模拟退火算法是一种灵活且强大的全局优化方法,其在MATLAB中的实现可以通过调整参数和适应度函数来适应各种优化问题。通过分析SA71.m和SA72.m,我们可以深入理解算法的运行机制,并结合图形化结果,如适应...
利用模拟退火算法实现解决多元函数(一元函数)最优值问题(单目标问题),读者根据代码修改测试函数,不管是一元还是多元,都可以解决其最优话问题。