在类外设置属性
我有一个类,
class Interval:
def __init__(self, min, max):
self.min = min
self.max = max
self.compare_mode = None
def min_max(min, max = None)-> 'Interval Object':
'''Code to return properly initialized Interval Object
'''
...
return Interval(min, max)
这里展示的是我这个类的主要部分,跟我的问题有关。这里我有两个已经正确初始化的 Interval 对象。
l = Interval.min_max(1.0,5.0)
r = Interval.min_max(4.0,6.0)
现在我想通过绑定一些特定的字符串来更新这个类的 self.compare_mode 属性,代码如下:
Interval.compare_mode = 'liberal'
当我在类外使用 print(Interval.compare_mode)
打印这个值时,似乎这个值已经被绑定了。但是当我在 Interval 类的其他方法中尝试访问这个字符串时,它仍然是 None。我只是想在创建 Interval 对象后,通过 Interval.compare_mode = 'some string'
在任何时候更新这个类的 compare_mode 属性。
1 个回答
2
实例属性和类属性是有区别的。
当你给 self.compare_mode
赋值时,你是在操作实例属性;而当你给 Interval.compare_mode
赋值时,你是在操作类属性。
不过在读取属性时,系统会先尝试找实例属性,如果找不到,再去找类属性。
试试这个修改:
class Interval:
compare_mode = None # Class attribute
def __init__(self, min, max):
self.min = min
self.max = max
# NOT setting self.compare_mode here