在一个衬里中使用预定义参数子类化 Python 类

问题描述 投票:0回答:2

给定一个简单的类:

class MyClassA():
    def __init__(self, param_a, param_b):
        
        self.param_a = param_a
        self.param_b = param_b

    def my_method(self, param_c):
        return some_fun(self.param_a, self.param_b)

现在我想创建这个类的一个实例,只设置

param_b
。 即像这样的东西:

class MyClassB(MyClassA):
    def __init__(self, param_a):
        
        super().__init__(param_a, something)

现在我想要:

my_obj_c = MyClassB(some_val)
.

问题是,有没有办法在一个班轮中获得

my_obj_c
而无需明确构建
MyClassB

动机

我需要这个的原因实际上是这个类被一个不同的过程使用,它支持用一个输入调用这个类。
我想要的是尝试它(如网格搜索),它有许多不同的

param_b
值。这就是为什么设置默认值不会这样做的原因。

python class subclassing
2个回答
0
投票

你怎么看

class MyClassA():
    def __init__(self, param_a, param_b=SomeValue):
...

这样你就可以像这样创建实例:

obj1 = MyClassA(param_a, param_b)
obj2 = MyClassA(param_a)

在第二个实例中,param_b 将是 someValue


0
投票

您可以使用 functools.partial 来制作带有第二个预设参数的类构造函数的一部分。

import functools 

class MyClassA():
    def __init__(self, param_a, param_b):        
        self.param_a = param_a
        self.param_b = param_b

    def my_method(self):
        return f"{self.param_a} {self.param_b}"

Paramterized = functools.partial(MyClassA, param_b="world")

my_instance = Paramterized("hello")
# <__main__.MyClassA at 0x112816e00> 
my_instance.my_method()
#'hello world'

my_instance2 = Paramterized("goodbye cruel")
my_instance2.my_method()
# 'goodbye cruel world'
© www.soinside.com 2019 - 2024. All rights reserved.