通过将其附加到python对象中来调用方法n次

发布于 2025-01-22 20:03:32 字数 847 浏览 0 评论 0 原文

假设我有一个python类 sum()带有方法 add(),可以获取用于操纵的数字列表,例如,

sum = Sum()
sum.add([5, 8, 2])

我想改用。通过“附加”在每个列表项目上添加方法。我该如何实现?

sum.add(5).add(8).add(2)

为了清楚起见,我在 keras> keras

model = tf.keras.Sequential([
   hub_layer,
   tf.keras.layers.Dense(16, activation='relu'),
   tf.keras.layers.Dense(1)
])

也可以是,这也可以是表示为

model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1))

,我想实现上述方案的第二个

Say i have a python class Sum() with a method add() that can take a list of numbers for manipulation, say

sum = Sum()
sum.add([5, 8, 2])

I want to instead call the .add method on each list item by 'appending' to itself. How can i achieve this?

sum.add(5).add(8).add(2)

For clarity, i have seen the two implementations in keras

model = tf.keras.Sequential([
   hub_layer,
   tf.keras.layers.Dense(16, activation='relu'),
   tf.keras.layers.Dense(1)
])

Which can also be represented as

model = tf.keras.Sequential()
model.add(hub_layer)
model.add(tf.keras.layers.Dense(16, activation='relu'))
model.add(tf.keras.layers.Dense(1))

I want to achieve the second for the above scenarios, whereby I call the .add method n times for each item I have in a list

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

羁〃客ぐ 2025-01-29 20:03:33

在您的添加函数中,只需返回对象本身,

def add(self, number: int):
    # do your stuff
    return self

这是有效的,因为下一个.ADD将在上一个.ADD的返回元素(又称对象本身)的返回元素上执行

in your add function, simply return object itself

def add(self, number: int):
    # do your stuff
    return self

this works because the next .add is going to be executed on the returned element of the previous .add (aka the object itself)

hope it helps :)

痴意少年 2025-01-29 20:03:33

您可以在 sum 对象上调用方法添加。让我们分解行

sum.add(5).add(8)

add(5)应用于 sum 对象<代码> sum 。

add(8)也必须应用于 sum 对象,因此 sum.add(5)必须返回 sum /代码>对象。

通常,添加方法必须返回 sum 对象

You can call the method add on Sum objects. Let's decompose the line

sum.add(5).add(8)

add(5) is applied to the Sum object sum.

add(8) must be applied to a Sum object as well, so sum.add(5) must return a Sum object as well.

In general the add method must return a Sum object

停顿的约定 2025-01-29 20:03:33

为了链接方法,您需要返回对象实例的方法(aka self )。您可以找到一些其他信息在这里

如果您对象 sum 有一个方法 add ,则可以编写 sum.add(x)。但是,您无法在任何内容上调用添加,只能在此类 sum 的实例上调用它。因此,如果您想执行 sum.add(x).add(y),则需要 sum.add(x) sum /code>,因此 add 方法应返回 sum 实例。如果要修改对象本身(而不是创建另一个),则需要添加才能返回 self

For being able to chain methods, you need the method to return the instance of the object (aka self). You can find some additional information here.

If you object sum has a method add, then you can write sum.add(x). However, you can't call add on anything, you can only call it on instances of this class Sum. So if you want to do sum.add(x).add(y), you need that sum.add(x) is an instance of Sum, so the add method should return a Sum instance. If you want the object itself to be modified (and not create another one), you need add to return self.

静谧幽蓝 2025-01-29 20:03:33

您需要让 add()方法返回 sum 对象发生。

这是一个最小的例子。 (我将类<代码> A命名为,因为 sum 是一个python函数,最好不要混淆两者。)

class A:
    def __init__(self, n=0):
        self.value = n
        
    def __repr__(self):
        return str(self.value)
        
    def add(self, a_list):
        self.value += sum(a_list)
        return self


x = A()
print(x)

x.add([3, 3])
print(x)

x.add([10,10]).add([1,1,1])
print(x)

输出:

0
6
29

You need to have the add() method returning a Sum object for this to occur.

Here is a minimal example. (I named the class A because sum is a Python function and it is better not to confuse the two. )

class A:
    def __init__(self, n=0):
        self.value = n
        
    def __repr__(self):
        return str(self.value)
        
    def add(self, a_list):
        self.value += sum(a_list)
        return self


x = A()
print(x)

x.add([3, 3])
print(x)

x.add([10,10]).add([1,1,1])
print(x)

Output:

0
6
29
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文