打印不在__getattr__中工作

时间:2015-06-16 18:06:25

标签: python python-2.7 python-3.x

我有这堂课:

if (averageScore >= 60)
    {
        cout << "P\n";
    }
    else (averageScore <= 59);
    {
        cout << "F\n";
        cout << studentsName << " needs " << (60.0 - averageScore) << " additional points to pass the class.\n";
    }

当我设置属性时 - class Meta: def __getattr__(self, atr): print('get', atr) def __setattr__(self, atr, atr_value): print('{0} with value {1} added'.format(atr, atr_value)) self.__dict__[atr] = atr_value 有效:

print

但是当我打电话时:

>>> x.a = 1
a with value 1 added

在没有>>> x.a 1 输出的情况下返回值。

非常感谢帮助。

3 个答案:

答案 0 :(得分:2)

在新式类__getattr__中(对于旧样式类也是如此)只有在实例或其类上找不到该属性时才会被调用(这也包括基类)。

在新式课程中,您可以通过覆盖__getattribute__来实现此目的。

答案 1 :(得分:2)

仅当属性不存在时才调用

<ProgressBar android:id="@+id/progress_bar_test" android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:max="100" android:progress="10" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" /> ProgressBar progressBar= (ProgressBar)findViewById(R.id.progress_bar_test); ProgressBarDrawable bgProgress= new ProgressBarDrawable(5); progressBar.setProgressDrawable(bgProgress); 。您想要覆盖__getattr__

__gettattribute__

答案 2 :(得分:2)

如果属性在类或实例字典中,则__getattr__不会被调用。这是来自__setattr__的故意不对称。

如果您想要完全控制,请实施__getattribute__