在课堂外设置属性

时间:2014-04-25 08:20:03

标签: python class attributes

所以我有一个班级,

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.compare_mode = 'some string'创建Interval对象后更新类的compare_mode属性。

1 个答案:

答案 0 :(得分:1)

实例属性和类'属性之间存在差异。

当您指定self.compare_mode时,您指的是实例属性,当您指定Interval.compare_mode时,您会引用该类属性。

然而,在阅读时,首先它会尝试为您提供一个实例属性,如果失败则会获得class属性。

尝试此修改:

class Interval:
    compare_mode = None # Class attribute

    def __init__(self, min, max):
        self.min = min 
        self.max = max
        # NOT setting self.compare_mode here