 # Parameter is equal to another parameter unless a value is specified

Hey everyone,

I use most of the holoviz libraries, and I want to port a library I’m developing to Param, as it would make it integrate way better with every visualization I make (and waaay more robust, specially with the ability to have bounds).

The only thing I don’t know what to do is how to make a parameter dependent on another if I don’t say otherwise. A quick example would be this:

``````class B():
def __init__(self, a=2, b=None):
self.a = a
self.b  = b if b else a
``````

This would make it so the value of b is always equal to the value of a, unless I give a specific distinct value for b. So if I called `obj = B(a=6)` obj.b would be 6, but if I ran `obj = B(b=3)` obj.a would be 2 and obj.b would be 6.

Is there any easy way to implement this with the existing parameter types? I’ve tried the following

``````class A(param.Parameterized):
a = param.Integer(default=4)
b = param.Parameter(default=a)
``````

This almost works, as I set the default value to be a. The thing is, instead of getting the same value for my b variable, I get a pointer to the parameter itself (so in this example a would be an int, while b would be an Integer, which are different types). What am I missing?

This may be what you want:

``````class P(param.Parameterized):
a = param.Integer(default=4)
b = param.Parameter(default=a.default)
``````

Alternatively you could also implement that logic in the constructor:

``````class P(param.Parameterized):
a = param.Integer(default=4)
b = param.Integer(default=None)

def __init__(self, **params):
super().__init__(**params)
self.b = self.b if self.b is not None else self.a
``````
1 Like

That second one definitely works (the first one links b to the default of a, not whatever its value is). I just didn’t know how to merge the param object initialization with python’s native one, but I see it’s pretty simple! Thanks!

3 Likes