繁体   English   中英

如何从用户定义的 class 中解压缩两个值?

[英]How can I unpack two values from user defined class?

class Vector:
    def __init__(x,y):
        self.x=x
        self.y=y

如何获得两个变量x,y=Vector(20,10)

答案应该是 x=20,y=10。

如果您只想访问xy属性,可以使用点符号访问它们:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
vector = Vector(10, 20)
x = vector.x
y = vector.y

print('x =', x)
print('y =', y)
# Output
x = 10
y = 20

如果你想给你的 class 一个类似于元组解包的行为,你可以覆盖__iter__

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __iter__(self):
       yield self.x
       yield self.y

    def __str__(self):
        return 'x={}, y={}'.format(self.x, self.y)

vector = Vector(x=10, y=20)
print(vector)

x, y = vector
print('x =', x)
print('y =', y)
# Output
x=10, y=20
x = 10
y = 20

您的__init__方法当前定义不正确; 签名应该是def __init__(self, x, y) ,需要注意的重要一点是第一个参数是self

如果不定义某种方法将xy值作为元组返回,您将无法将它们提取为x, y = Vector(10, 20) ,您需要单独访问实例属性,即:

vector = Vector(10, 20)
x = vector.x
y = vector.y

或者,您可以在 class 上定义一个额外的方法来返回一个元组并解压缩:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def coords(self):
        return self.x, self.y

vector = Vector(10, 20)
x, y = vector.coords()
print(x, y)

Output:

10 20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM