Python class 常量使用 class 初始化方法?
Python class constant using class init method?
我做了一个class,可以在通用数据结构中进行比较和排序。
问题是我想为 class 可以采用的最大值和最小值创建两个 class 常量。所以我可以称这个值只是导入 MyClass 并写
obj = MyClass.MY_MAX_CONSTANT
问题是调用构造函数或init方法来初始化这些常量是不允许的。
在 Java 中,这将被声明为静态的并且它可以工作,但我不知道如何使用构造函数在 Python 中做一个 class / static 常量/初始化方法。没有找到太多谷歌搜索,但有一些常量的一般配方和制作属性的建议。
我不需要避免更改常量值的机制,因为我绝对不会更改它。
我的第一次尝试是:
class MyClass(object):
MY_MAX_CONSTANT = MyClass(10,10)
MY_MIN_CONSTANT = MyClass(0,0)
def __init__(self, param1, param2): # Not the exact signature, but I think this works as an example
# We imagine some initialization work here
self.x = param1
self.y = param2
# SORT FUNCTIONS
def __cmp__(self, other):
# Implementation already made here
def __eq__(self, other):
# Implementation already made here
def __ne__(self, other):
# Implementation already made here
def __ge__(self, other):
# Implementation already made here
# And so on...
第二次尝试,为每个常量使用一些函数:
class MyClass(object):
def __init__(self, param1, param2): # Not the exact signature, but I think this works as an example
# We imagine some initialization work here
self.x = param1
self.y = param2
MY_MAX_CONSTANT = None
MY_MIN_CONSTANT = None
@staticmethod
def get_max(self):
if not MyClass.MY_MAX_CONSTANT:
MyClass.MY_MAX_CONSTANT = MyClass(10,10)
return MyClass.MY_MAX_CONSTANT
@staticmethod
def get_min(self):
if not MyClass.MY_MIN_CONSTANT:
MyClass.MY_MIN_CONSTANT = MyClass(0,0)
return MyClass.MY_MIN_CONSTANT
# SORT FUNCTIONS (I'm not writing them twice for spacing)
但我想避免奇怪的函数机制只用于制作两个常量。
我更喜欢 class 中的常量而不是模块,因为它对我来说感觉更自然,但我正在听取任何意见或建议。谁能给我一个更好的 pythonic 解决方案?
谢谢
添加您的常量在 创建您的class 之后,您可以添加更多class 属性:
class MyClass:
# ...
MyClass.MY_MAX_CONSTANT = MyClass(10, 10)
MyClass.MY_MIN_CONSTANT = MyClass(0, 0)
只有当 class
语句完成 运行 时,class 对象才可用,绑定到名称 MyClass
。您不能在此之前创建实例。
我做了一个class,可以在通用数据结构中进行比较和排序。
问题是我想为 class 可以采用的最大值和最小值创建两个 class 常量。所以我可以称这个值只是导入 MyClass 并写
obj = MyClass.MY_MAX_CONSTANT
问题是调用构造函数或init方法来初始化这些常量是不允许的。
在 Java 中,这将被声明为静态的并且它可以工作,但我不知道如何使用构造函数在 Python 中做一个 class / static 常量/初始化方法。没有找到太多谷歌搜索,但有一些常量的一般配方和制作属性的建议。
我不需要避免更改常量值的机制,因为我绝对不会更改它。
我的第一次尝试是:
class MyClass(object):
MY_MAX_CONSTANT = MyClass(10,10)
MY_MIN_CONSTANT = MyClass(0,0)
def __init__(self, param1, param2): # Not the exact signature, but I think this works as an example
# We imagine some initialization work here
self.x = param1
self.y = param2
# SORT FUNCTIONS
def __cmp__(self, other):
# Implementation already made here
def __eq__(self, other):
# Implementation already made here
def __ne__(self, other):
# Implementation already made here
def __ge__(self, other):
# Implementation already made here
# And so on...
第二次尝试,为每个常量使用一些函数:
class MyClass(object):
def __init__(self, param1, param2): # Not the exact signature, but I think this works as an example
# We imagine some initialization work here
self.x = param1
self.y = param2
MY_MAX_CONSTANT = None
MY_MIN_CONSTANT = None
@staticmethod
def get_max(self):
if not MyClass.MY_MAX_CONSTANT:
MyClass.MY_MAX_CONSTANT = MyClass(10,10)
return MyClass.MY_MAX_CONSTANT
@staticmethod
def get_min(self):
if not MyClass.MY_MIN_CONSTANT:
MyClass.MY_MIN_CONSTANT = MyClass(0,0)
return MyClass.MY_MIN_CONSTANT
# SORT FUNCTIONS (I'm not writing them twice for spacing)
但我想避免奇怪的函数机制只用于制作两个常量。
我更喜欢 class 中的常量而不是模块,因为它对我来说感觉更自然,但我正在听取任何意见或建议。谁能给我一个更好的 pythonic 解决方案?
谢谢
添加您的常量在 创建您的class 之后,您可以添加更多class 属性:
class MyClass:
# ...
MyClass.MY_MAX_CONSTANT = MyClass(10, 10)
MyClass.MY_MIN_CONSTANT = MyClass(0, 0)
只有当 class
语句完成 运行 时,class 对象才可用,绑定到名称 MyClass
。您不能在此之前创建实例。