Python 中的函数和构造函数枚举
Enumerations With Functions and Constructors in Python
我正在学习 Python 并且正在为 PyGame 库划定界限。没什么问题,我只是想让方法和类更适合我的具体项目。简而言之,我想进行颜色枚举,但枚举中的每个值都有 RGB 和 Hex 版本。由于我之前在 Java 中完成过此操作,因此我将在 Java 枚举中大致说明我的意思。
public enum Color {
RED(new double[]{255, 0, 0}, "#ff0000"),
CYAN(new double[]{0, 255, 255}, "#00e1ff");
// Other colors...
double[] rgb;
String hex;
Color(double[] rgb, String hex) {
this.rgb = rgb;
this.hex = hex;
}
public double[] getRGB() {
return rgb;
}
public String getHex() {
return hex;
}
}
我在这里所做的只是为枚举创建一个构造函数(在 Java 中默认为私有),并使枚举中的每个项目在该构造函数中指定参数。例如RED,通过构造函数指定rgb double数组等于{255, 0, 0},十六进制字符串为"ff0000"。使用底部的方法,您可以在代码的任何位置检索这些值。
最后,如果我将枚举导入代码,然后使用 RED 项,我可以说 RED.getRGB() 并得到一个双精度数组。我想在此枚举中添加一堆颜色,但我也想了解一般的语法,因为它适用于我程序的其他部分。
我想在 Python 中执行此操作。我几乎不了解在 Python 中进行常规枚举,也不了解整个 "class Clazz(Enum):" 的事情,但我当然不知道如何在 Python 中执行上面的代码。我只是不知道语法。
别想太多
class Color:
def __init__(self,r,g,b):
self.r = r
self.g = g
self.b = b
def __str__(self):
# return the string repr
return f"#{self.r:02X}{self.g:02X}{self.b:02X}"
def __getitem__(self,item):
# allow `color[0],color[1],color[2]` access
return [self.r,self.g,self.b][item]
def __iter__(self):
# cast to list
return iter([self.r,self.g,self.b])
class Colors:
RED = Color(255,0,0)
GREEN = Color(0,255,0)
BLUE = Color(0,0,255)
WHITE = Color(255,255,255)
BLACK = Color(0,0,0)
print(list(Colors.RED))
print(Colors.GREEN[1])
print("%s"%Colors.BLUE)
如果你真的想使用那个枚举class你可以如下
从枚举导入枚举
class Color:
def __init__(self,r,g,b):
self.r = r
self.g = g
self.b = b
def toHex(self):
return f"#{self.r:02X}{self.g:02X}{self.b:02X}"
def toRGB(self):
return (self.r,self.g,self.b)
class Colors(Enum):
RED = Color(255,0,0)
GREEN = Color(0,255,0)
BLUE = Color(0,0,255)
WHITE = Color(255,255,255)
BLACK = Color(0,0,0)
print(Colors.RED)
print(Colors.GREEN.value.toRGB())
print("%s"%Colors.BLUE.value.toHex())
我正在学习 Python 并且正在为 PyGame 库划定界限。没什么问题,我只是想让方法和类更适合我的具体项目。简而言之,我想进行颜色枚举,但枚举中的每个值都有 RGB 和 Hex 版本。由于我之前在 Java 中完成过此操作,因此我将在 Java 枚举中大致说明我的意思。
public enum Color {
RED(new double[]{255, 0, 0}, "#ff0000"),
CYAN(new double[]{0, 255, 255}, "#00e1ff");
// Other colors...
double[] rgb;
String hex;
Color(double[] rgb, String hex) {
this.rgb = rgb;
this.hex = hex;
}
public double[] getRGB() {
return rgb;
}
public String getHex() {
return hex;
}
}
我在这里所做的只是为枚举创建一个构造函数(在 Java 中默认为私有),并使枚举中的每个项目在该构造函数中指定参数。例如RED,通过构造函数指定rgb double数组等于{255, 0, 0},十六进制字符串为"ff0000"。使用底部的方法,您可以在代码的任何位置检索这些值。
最后,如果我将枚举导入代码,然后使用 RED 项,我可以说 RED.getRGB() 并得到一个双精度数组。我想在此枚举中添加一堆颜色,但我也想了解一般的语法,因为它适用于我程序的其他部分。
我想在 Python 中执行此操作。我几乎不了解在 Python 中进行常规枚举,也不了解整个 "class Clazz(Enum):" 的事情,但我当然不知道如何在 Python 中执行上面的代码。我只是不知道语法。
别想太多
class Color:
def __init__(self,r,g,b):
self.r = r
self.g = g
self.b = b
def __str__(self):
# return the string repr
return f"#{self.r:02X}{self.g:02X}{self.b:02X}"
def __getitem__(self,item):
# allow `color[0],color[1],color[2]` access
return [self.r,self.g,self.b][item]
def __iter__(self):
# cast to list
return iter([self.r,self.g,self.b])
class Colors:
RED = Color(255,0,0)
GREEN = Color(0,255,0)
BLUE = Color(0,0,255)
WHITE = Color(255,255,255)
BLACK = Color(0,0,0)
print(list(Colors.RED))
print(Colors.GREEN[1])
print("%s"%Colors.BLUE)
如果你真的想使用那个枚举class你可以如下
从枚举导入枚举
class Color:
def __init__(self,r,g,b):
self.r = r
self.g = g
self.b = b
def toHex(self):
return f"#{self.r:02X}{self.g:02X}{self.b:02X}"
def toRGB(self):
return (self.r,self.g,self.b)
class Colors(Enum):
RED = Color(255,0,0)
GREEN = Color(0,255,0)
BLUE = Color(0,0,255)
WHITE = Color(255,255,255)
BLACK = Color(0,0,0)
print(Colors.RED)
print(Colors.GREEN.value.toRGB())
print("%s"%Colors.BLUE.value.toHex())