在python 27中如何将带参数的方法传递给类的__init __()?

时间:2015-09-16 04:53:52

标签: python class python-2.7 module parameter-passing

我正在尝试将参数传递给我想要从类的实例调用的函数,但我不知道该怎么做。我可以做得很好,如果我没有通过任何参数,但第二次我开始通过params它会在我的脸上爆炸。

以下是我想要做的一个例子。

class foo:
    def __init__(self, use_function=None):
        self.use_function = use_function

    def call(self):
        self.use_function()

def bar(number):
    print 'number is ' + str(number)

myObj = foo( use_function=bar(15) )

myObj.call()

4 个答案:

答案 0 :(得分:3)

您无法传递参数,因为您的INSERT INTO MyTable (Col1,Col2,Col3) VALUES ( SELECT Col1 FROM (SELECT Col1 FROM table1), SELECT Col2 FROM (SELECT Col2 FROM table2), SELECT Col3 FROM (SELECT Col3 FROM table3) ) 函数不接受参数,它只接受函数。如果您通过__init__,则会在 bar(15)之前调用bar ,并且__init__会收到{{>> {em>的返回值 1}}(在本例中为None)。

如果您希望__init__拨打bar(15),您可以执行__init__。这将传递给bar(15)零参数函数,该函数在被调用时将调用foo( use_function=lambda: bar(15) )

答案 1 :(得分:1)

function get_records()
{
        $this->db->select("a.criteria_question,a.criteria_answer,a.validation_statement");
        $this->db->from("verification_questions as a");
        $this->db->join('verification_details as b', 'a.verification_id = b.verification_id');
        $query = $this->db->get();
        $select = array();
        foreach ($query->result() as $row) {
            $select[] = $row;
        }
        if (count($select) > 0)
            return $select;
        return NULL;
}

答案 2 :(得分:1)

class foo:
    def __init__(self, use_function=None):
        self.use_function = use_function

    def call(self):
        eval(self.use_function)

def bar(number):
    print 'number is ' + str(number)

myObj = foo( use_function="bar(15)" )

myObj.call()

如果要将参数传递给函数,将函数传递给init时,可以传递一个字符串bar(15),即要调用函数的位置,只需使用内置函数在函数eval

答案 3 :(得分:0)

您可以在bar()

中返回要打印的值
class foo:
  def __init__(self,use_func=None):
    self.u = use_func
  def call(self):
    print self.u

def bar(n):
 return n

myobj = foo(use_func=bar(15))
myobj.call()

所有因为你没有从bar()传递任何东西,myobj得到无