是否可以组合方法? (Python,定义 class 方法)

Is it possible to combine methods? (Python, defining class methods)

我目前正在学习 Python 教程,在观看了有关创建 class 和定义其方法的课程后,我想知道是否可以组合方法。

所以不要使用:

class Coordinates:
    def point1(self):
        print(x)

    def point2(self):
        print(y)

    def point3(self):
        print(z)

x = 5
y = 4
z = 9

Coordinates.point1(x) / Coordinates.point2(y) / Coordinates.point3(z)

我可以改用它来调用 x、y 或 z:

class Coordinates:
    def point(self):
        print(x or y or z)


x = 5
y = 4
z = 9

Coordinates.point(x/y/z)

如果我这样做,尽管我总是在终端上得到 x 的数字 5,无论我使用 x、y 还是 z 作为 self。

感谢任何意见:)

class Coordinates:
    def __init__(self,x,y,z):
        self.x=x
        self.y=y
        self.z=z
    def point(self,letter):
        if letter == "x" :
           print(self.x)
        elif letter == "y" :
           print(self.y)
        elif letter == "z":
           print(self.z)


cord= Coordinates(5,4,9)
cord.point('x')

据我了解,您想从 Class 中调用 单一方法 应该 根据指定的输入 [x 或 y 或 z] 执行条件,而不是为那些 单独的方法

如果是这种情况,您可以阅读下文如何操作

class Coordinates:
    def __init__(self,x,y,z):
        self.x_value = x # Holds the value of x coordinate when initializing the class
        self.y_valye = y # Holds the value of y ...
        self.z_value = z # Holds the value of z ...

    # The match case is only available in python 3.10 + [ you can use simple if else statements instead for below versions ]
    def eval_point(self,coordinate_axis):
        match coordinate_axis:
            case "x":
                print("Eval x coordinate function here")
            case "y":
                print("Eval y coordinate function here")
            case "z":
                print("Eval z coordinate function here")



x = 5
y = 4
z = 9

eval_coordinate = Coordinates(x,y,z) # Values should be passed in order as defined in constructor
eval_coordinate.eval_point("x") # Change the string value to whatever coordinate eval you want [example x,y,z]

您不需要单独的函数来获取每个 x、y 和 z 值。

首先,您可以考虑像这样直接访问实例变量而完全没有函数:

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

C = Coordinates(10, 20, 30)

print(C.x, C.y, C.z)

另一种选择是使用属性。例如:

class Coordinates:
    def __init__(self, x, y, z):
        self._x = x
        self._y = y
        self._z = z
    @property
    def x(self):
        return self._x
    @property
    def y(self):
        return self._y
    @property
    def z(self):
        return self._z

C = Coordinates(10, 20, 30)

print(C.x, C.y, C.z)

通过这种方式,您可以控制针对任何给定值返回的内容。

您甚至可以让您的 class 像字典一样运行,如下所示:

class Coordinates:
    def __init__(self, x, y, z):
        self.d = {'x': x, 'y': y, 'z': z}

    def __getitem__(self, k):
        return self.d.get(k, None)


C = Coordinates(10, 20, 30)

print(C['x'], C['y'], C['z'])

在最后一个示例中,您只有一个函数涉及变量的获取,但即便如此您也没有显式调用它