如何将一个值作为参数传递给两个方法?

2024-09-30 14:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的类:

connection有db连接

import pandas as pd
from animal import kettle
class cat:
    def foo(connection):
        a=pd.read_sql('select * from zoo',connection)
        return1= kettle.boo1(a)
        return2= kettle.boo2(a)
        return return1,return2

现在我想把a传递给水壶的boo1boo2,我在上面foo()中传递它的方式正确吗?你知道吗

我认为上面的方法是正确的,我试过这种方法,但这种方法正确吗?你知道吗

你知道吗动物.py地址:

class kettle:
    def boo1(return1):
         print(return1)

    def boo2(return2):
        print(return2)

抱歉,如果这不合理, 我的意图是将a传递给boo1boo2类的kettle


Tags: 方法fromimportdbfoodefconnectionclass
2条回答

你的问题有(许多)可能的解决方案,不管是什么。我假设您刚开始在Python中进行面向对象编程,并根据

unbound method boo1() must be called with kettle instance as first argument

可能想要这个解决方案:

为类方法提供实例参数:

def boo1(self, return1):

在中实例化cattle类猫腻地址:

k = kettle()

然后像这样使用:

k.boo1(a)

boo2方法也是如此。你知道吗

您可能还想:

return return1  # instead of or after print(return1)

当您的方法返回None时。你知道吗

这看起来是正确的方法:首先将pd.read_sql('select * from zoo', connection)的返回值赋给a,然后将a传递给kettle.boo1kettle.boo2,这样可以确保只执行一次可能耗时的数据库IO。你知道吗

在传递list/dicts/dataframes等对象时,这个设计模式需要记住的一点是kettle.boo1是否会更改a中的值。如果是这样,kettle.boo2将接收修改后的a版本作为输入,这可能导致意外行为。你知道吗

下面是一个非常简单的例子:

>>> def foo(x):
...     x[0] = 'b'
...
>>> x = ['a']  # define a list of length 1
>>> foo(x)  # call a function that modifies the first element in x
>>> print(x)  # the value in x has changed
['b']

相关问题 更多 >