在类外设置属性

1 投票
1 回答
2161 浏览
提问于 2025-04-18 04:11

我有一个类,

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

撰写回答