将对象值作为参数传递给函数

时间:2018-01-26 14:29:05

标签: python

有没有办法将一个类作为一个参数传递给我曾经嘲笑的函数?

例如:

如果我有课:

class a:
    def __init__(self,x,y,z):
        self._x = x
        self,_y = y
        self,_z = z

和一些功能:

def function(x,y,z):
    print(x,y,z)

有没有办法将对象作为参数传递给函数?

tmp = a(1,2,3)

function(tmp)

编辑:

我会支持我的问题:

如果我不想直接访问对象变量,而是通过a.getX或a.getY等函数访问。

是否仍然可以将类传递给cuntion并且whiting函数预先形成a.getX和a.getY函数?

def function(a):
    print(a.getX, a.getY)

4 个答案:

答案 0 :(得分:2)

如果您的函数有三个参数x, y, z,并且您希望这些参数是类实例的相应x, y, z值,则可以将这些参数显式传递给函数...

tmp = A(1, 2, 3)
func(tmp.x, tmp.y, tmp.z)

...或者您可以让您的类实现__iter__方法并将其作为func(*tmp)传递,以自动将x, y, z属性解压缩为三个参数:

class A:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
    def __iter__(self):
        return iter([self.x, self.y, self.z])

def func(x, y, z):
    print(x, y, z)

func(*tmp)

后者当然只有在__iter__方法以与函数所期望的顺序相同的顺序返回属性时才有效。

答案 1 :(得分:1)

您可以在所需变量上解压缩__dict__,但名称必须相同:

class A:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
def function(x, y, z):
    print(x, y, z)

tmp = a(1, 2, 3)
func(**tmp.__dict__)
#(1,2,3)

答案 2 :(得分:0)

Python中的所有内容都是一个对象。

目前,function有三个参数,但没有任何东西阻止类实例成为其中一个参数

也许你正在寻找这个

def function(foo):
    print(foo._x, foo._y, foo._z)

tmp = a(1,2,3)
function(tmp)

如果您的代码有错误,请检查self,_y的语法并替换逗号

答案 3 :(得分:0)

  

有没有办法将对象作为参数传递给函数?

是的,如果你定义你的函数来接收一个参数:

def f(some_a):
    print(some_a)