如何在Python中制作“子变量”? (位置.x,位置.y,位置.z)

问题描述 投票:0回答:4

如何在Python中创建“子变量”? 基本上我想做的是有一个包含变量的类,它返回像列表这样的值,但如果我这样做

var.subvar
它只会返回列表中的值之一。 示例:

class Object:
  
  def _init_(self, x, y, z):
    self.position.x = x #Sets sub-variables 
    self.position.y = y 
    self.position.z = z

  #Functions

object = Object(5, 3, 1)

print(object.position) #Should print out 5, 3, 1
print(object.position.y) #Should print out 3

我知道我可以使用函数或字典,但是有没有其他方法而不使用任何括号?

我尝试将变量名称设置为

var.subvar
,但效果并不好,我正在寻找更有效的东西(如果存在类似的东西)。

python list variables
4个回答
0
投票

你可以创建一个像 Vector3 这样的类,它存储 3 个变量 x、y 和 z。然后,您只需将 Vector3 存储在另一个类中即可。 否则你也可以使用 @property 上面的方法返回一些变量,这个装饰器使方法看起来像一个变量,所以你可以像不带括号的类的变量一样调用它


0
投票

您可以创建一个类

Point
来执行如下操作:

class Point3D:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
        self.coord = [x, y, z]

class Object:

    def __init__(self, x, y, z):
        self.position = Point3D(x, y, z)

    # Functions


object = Object(5, 3, 1)

print(object.position.coord)  # note self.position.coord, not just self.position (which will print the object)
print(object.position.y)  # Should print out 3


0
投票

首先创建一个具有您想要的行为的 Position 类:

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

这将允许您访问对象的 x、y 和 z 属性。为了定义如何打印对象,您需要定义其

__repr__
- 返回对象的字符串表示形式的方法。

    def __repr__(self):
        return ", ".join(str(i) for i in [self.x, self.y, self.z])

您可以测试对象:

position = Position(5, 3, 1)
print(position)   # 5, 3, 1
print(position.x) # 5

您可以看到它按照您想要的方式工作

object.position
,所以现在只需将其分配给它即可。

class Object:
    def __init__(self, x, y, z):
        self.position = Position(x, y, z)
o = Object(5, 3, 1)

(或者,您可以创建一个直接接受位置对象的构造函数:

class Object:
    def __init__(self, position):
        self.position = position
o = Object(position)

两者最终都会产生相同的行为:

print(o.position) #Should print out 5, 3, 1
print(o.position.y) #Should print out 3

0
投票

正如有人在评论中建议的那样,您可以创建另一个名为 Position 的类。我添加了

__str__
,因此当您调用
object.position
时,将打印值而不是类对象。请记住,您需要双下划线来表示
__init__

class Object:

  def __init__(self, x, y, z):
    self.position = Position(x, y, z)

  #Functions

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

    def __str__(self):
        return f"{self.x}, {self.y}, {self.z}"
   
object = Object(5, 3, 1)

print(object.position) #Should print out 5, 3, 1
print(object.position.y) #Should print out 3
© www.soinside.com 2019 - 2024. All rights reserved.