我有这堂课:
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
输出的情况下返回值。
非常感谢帮助。
答案 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__
。