Python:将参数冻结到类__init__函数中

塔尔怀

假设我有一个看起来像这样的课:

  class MyClass(object):
        def __init__(self, some_arg, param=None):
            self.some_arg = some_arg
            self.param = param

在大多数情况下,我会像这样初始化我的课程:

obj = MyClass(1, param='some_string')

但是我偶尔会有一个代码路径,该路径可param根据某种逻辑设置关键字参数,同时将some_arg位置参数保持为恒定值。这段代码看起来像:

if some_condition:
   obj = MyClass(1, param='some_string')
elif some_other_condition:
   obj = MyClass(1, param='some_other_string')
else:
   obj = MyClass(1, param='some_third_string')

我的问题是:我可以避免在MyClass(1对象实例化一部分中重复自己吗?我想在代码路径的整个过程中将positional的值冻结some_arg1,并param在实例化时简单地传递关键字参数

理想情况下,代码应如下所示:

MyClass = magic_function_to_freeze_some_arg(MyClass, some_arg=1)

if some_condition:
   obj = MyClass(param='some_string')
elif some_other_condition:
   obj = MyClass(param='some_other_string')
else:
   obj = MyClass(param='some_third_string')

print(obj.some_arg) # Always 1 regardless of which if condition is hit

关于什么是干净实现的任何想法magic_function_to_freeze_some_arg会是什么样子?是否可以通过Python标准库执行此操作?

亚当·史密斯

您正在寻找functools.partial

from functools import partial

MyClass_new = partial(MyClass, some_arg=1)

或者(如mgilson在评论中所述),您可以构建自己的匿名构造方法

MyClass_new = lambda *args,**kwargs: MyClass(*args, some_arg=1, **kwargs)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类作为python __init__中的参数

来自分类Dev

将__init__值从更高的类传递到需要相同参数的子类中

来自分类Dev

如何将参数传递给类中的__init__

来自分类Dev

从Python中的构造函数__init__内省参数

来自分类Dev

Python:类中的 __init__

来自分类Dev

Python中的类是否需要__init__构造函数?

来自分类Dev

Python中的类是否需要__init__构造函数?

来自分类Dev

是否将参数副本或参数本身传递给__init__中的函数?

来自分类Dev

如何在类的__init__函数中使用canvas参数?

来自分类Dev

python类的属性不在__init__中

来自分类Dev

Python:从__init__函数中调用类变量和类方法

来自分类Dev

Python:如何使用类方法在__init__函数中定义变量?

来自分类Dev

带有 __init__ 函数的 Python 类多重继承

来自分类Dev

Python类__init__确认

来自分类Dev

python类的__init__方法

来自分类Dev

在某些类的python中的__init__ def中获取变量

来自分类Dev

python模块__init__函数

来自分类Dev

如何处理python __init__中缺少的参数?

来自分类Dev

在Python 3中扩展类并使用__init__构造它

来自分类Dev

杀死在Python的__init__类中创建的子进程

来自分类Dev

杀死在Python的__init__类中创建的子进程

来自分类Dev

动态添加属性到python中的__init__方法

来自分类Dev

动态添加属性到python中的__init__方法

来自分类Dev

如何在其元类的__init__方法期间将方法绑定到类?

来自分类Dev

如何在其元类的__init__方法期间将方法绑定到类?

来自分类Dev

python中的函数__init__不起作用

来自分类Dev

Python在__init__中为包和函数创建if elif

来自分类Dev

在同一类的其他函数中使用__init__参数

来自分类Dev

Django:当没有定义 __init__() 时,模型类如何接受构造函数参数?

Related 相关文章

  1. 1

    类作为python __init__中的参数

  2. 2

    将__init__值从更高的类传递到需要相同参数的子类中

  3. 3

    如何将参数传递给类中的__init__

  4. 4

    从Python中的构造函数__init__内省参数

  5. 5

    Python:类中的 __init__

  6. 6

    Python中的类是否需要__init__构造函数?

  7. 7

    Python中的类是否需要__init__构造函数?

  8. 8

    是否将参数副本或参数本身传递给__init__中的函数?

  9. 9

    如何在类的__init__函数中使用canvas参数?

  10. 10

    python类的属性不在__init__中

  11. 11

    Python:从__init__函数中调用类变量和类方法

  12. 12

    Python:如何使用类方法在__init__函数中定义变量?

  13. 13

    带有 __init__ 函数的 Python 类多重继承

  14. 14

    Python类__init__确认

  15. 15

    python类的__init__方法

  16. 16

    在某些类的python中的__init__ def中获取变量

  17. 17

    python模块__init__函数

  18. 18

    如何处理python __init__中缺少的参数?

  19. 19

    在Python 3中扩展类并使用__init__构造它

  20. 20

    杀死在Python的__init__类中创建的子进程

  21. 21

    杀死在Python的__init__类中创建的子进程

  22. 22

    动态添加属性到python中的__init__方法

  23. 23

    动态添加属性到python中的__init__方法

  24. 24

    如何在其元类的__init__方法期间将方法绑定到类?

  25. 25

    如何在其元类的__init__方法期间将方法绑定到类?

  26. 26

    python中的函数__init__不起作用

  27. 27

    Python在__init__中为包和函数创建if elif

  28. 28

    在同一类的其他函数中使用__init__参数

  29. 29

    Django:当没有定义 __init__() 时,模型类如何接受构造函数参数?

热门标签

归档