是否可以组合方法? (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'])
在最后一个示例中,您只有一个函数涉及变量的获取,但即便如此您也没有显式调用它
我目前正在学习 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'])
在最后一个示例中,您只有一个函数涉及变量的获取,但即便如此您也没有显式调用它