如何将子类的函数名称作为参数传递给python中的父类方法?

用户名
from datetime import datetime
import time

class Base(object):
    def __init__(self):
        pass

    def storeResult(self, function_name, result, executed_time= None):
        pass  # store result in nested dictinary



class Derived(Base):

    def __init__(self):
         pass

    def sum(self, a, b):
        print 'In derived!'
        a = 0
        b = 0
        result = a + b
        super(Base, self).storeResult("sum", result, str(datetime.now())) # Don't want to pass string,Is there any pythonic way of passing function name

    def diff(self, a, b):
        print 'In derived!'
        result = a - b
        super(Base, self).storeResult("diff", result, str(datetime.now())) # Don't want to pass string, Is there any pythonic way of passing function name

    def multiply(self, a, b):
        print 'In derived!'
        a = 0
        b = 0
        result = a * b
        super(Base, self).storeResult("multiply", result, str(datetime.now())) # Don't want to pass string, Is there any pythonic way of passing function name

    def divide(self, a, b):
        print 'In derived!'
        a = 0
        b = 0
        result = a / b
        super(Base, self).storeResult("divide", result, str(datetime.now())) # Don't want to pass string,  Is there any pythonic way of passing function name


if __name__ == '__main__':
    d = Derived()
    d.sum(1,2)
    d.diff(2,1)
    d.multiply(1,2)
    d.divide(10,5)
    d.sum(1,12)
    d.diff(12,1)
    d.multiply(11,2)
    d.divide(10,15)
    d.sum(11,12)
    d.diff(12,1)
    d.multiply(11,2)
    d.divide(110,5)

我面临以下问题:

1)我想从子类中调用父类方法:第79行,以总和:: super(Base,self).storeResult(“ sum”,result,str(datetime.now()))AttributeError:'super'对象没有属性“ storeResult”

2)如何将子类的函数名称作为参数以pythonic方式传递给父类方法?

3)我想确保在派生类的每个函数调用之后,将每个结果,函数名称和执行时间存储在基类storeResult中,例如{function:{result:time}}。

我对python有点陌生,在此先感谢。

马克西·高尔(Maciej Gol)

使用装饰器函数将包装被调用的方法。

from collections import defaultdict
from datetime import datetime
from functools import wraps


def store_result(method):
    @wraps(method)
    def wrapped(self, *args, **kwargs):
        result = method(self, *args, **kwargs)
        self.storeResult(method.__name__, result, str(datetime.now()))
        return result

    return wrapped


class Base(object):
    def __init__(self):
        self.results = defaultdict(dict)

    def storeResult(self, function_name, result, executed_time= None):
        self.results[function_name][result] = executed_time


class Derived(Base):
    @store_result
    def sum(self, a, b):
        print 'In derived!'
        a = 0
        b = 0
        return a + b

    @store_result
    def diff(self, a, b):
        print 'In derived!'
        return a - b

    @store_result
    def multiply(self, a, b):
        print 'In derived!'
        a = 0
        b = 0
        return a * b

    @store_result
    def divide(self, a, b):
        print 'In derived!'
        a = 0
        b = 0
        return a / b

我已用于defaultdict存储结果-它允许在分配值时传递缺少键的工厂函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将参数名称作为参数传递给函数

将函数名称作为参数传递给mapply?

如何将参数名称作为参数传递?

如何将MongoDB集合名称作为参数传递给数据库连接函数-Python

如何将函数中的参数名称作为列值返回?

如何在Python 3中将函数名称作为String传递

将软件包名称和函数名称作为变量传递给python

如何将组件名称作为参数传递并在函数中接收它

如何将对象的函数名称作为参数传递

如何将模块/方法名称作为命令行参数传递 python 2.7.10

Python,如何将函数作为参数传递给类方法

如何将参数名称传递给方面方法

Python3:将函数名称作为参数传递

将函数名称作为脚本中的位置参数之一传递

PostgreSQL - 如何将角色名称作为参数传递给过程?

如何将特定类的方法名称作为另一个方法的参数传递

如何将类作为参数传递给PHP函数

如何将类类型作为参数传递给函数?

如何将多个列名称作为输入传递给dplyr中的group_by

如何将类作为可选参数传递给方法?

Python:如何将列表作为参数传递给函数?

如何将数据成员名称作为参数传递给另一个参数?

如何将类作为参数传递给 Swift 中的函数?

将子类传递给方法,但将超类作为参数?

将函数参数名称作为字符串传递

如何将函数名称及其参数作为参数传递?

将父类作为参数传递给函数

如何将字符串转换为参数名称并将其传递给函数?

python如何将配置解析器中的部分名称作为变量传递