整理自小甲鱼鱼C论坛
反运算
执行反运算时首先观察加法规则:
$$ a + b $$
这个加法中,首先来确定谁是加法的主动一方,谁是被加一方。a 是主动实施加法的一方,而b则是被加一方。而反运算描述的就是被加一方的相关的算数性质。
如下:
calss Nint(int): |
这里要注意other和self的顺序,如下,
class Nint(int): |
除了例子中的__rsub__()方法外,还有以下的反运算相关的魔法方法,
| 魔法方法 | 含义 |
|---|---|
| __radd__(self, other) | 定义加法行为:+ |
| __rsub__(self, other) | 定义减法行为:- |
| __rmul__(self, other) | 定义乘法行为:* |
| __rtruediv__(self, other) | 定义真除法行为:/ |
| __rfllordiv__(self, other) | 定义整数除法:// |
| __rmod__(self, other) | 定义取模算法:% |
| __rpow__(self, other) | 定义当被power()调用算法:** |
| 以下为汇编行为 | |
| __rlshift__(self, other) | 定义按位左移位行为:<< |
| __rrshift__(self, other) | 定义按位右移位行为:>> |
| __rand__(self, other) | 定义按位与操作行为:& |
| __rxor__(self, other) | 定义按位异或操作行为:^ |
| __ror__(self, other) | 定义按位或操作行为:| |
需要注意的是,以上操作都在相应操作数不支持相应操作时被调用
一元操作符
Python 支持的一元操作符:
| 一元操作符 | 含义 |
|---|---|
| __neg__() | 表示负号行为 |
| __pos__() | 表示正号行为 |
| __abs__() | 表示取绝对值时被调用的行为 |
| __invert__() | 表示定义按位取反的行为 |
问题:
(1) 如何在继承的类中调用基类的方法?
class Derived(Base): |
(2) 如果继承的基类是动态的,如何部署代码?
可以先为基类定义一个别名,在类定义时,使用别名代替你要继承的基类。如此,当想要改变基类的时候,只需要修改给别名赋值的那个语句即可。当资源是视情况而定的时候,这个方法很好用。代码示例如下,
BaseAlias = BaseClass |
(3) 举例说明静态,并指出使用类的静态方法的优点
class C: |
静态方法最大的优点,就是不会绑定到实例对象上,节省开销。
c1 = C() |
需要注意,静态方法不需要self参数,因此即使是使用对象去访问,self参数也无法传输进去
(4) 定义一个类,当实例化该类时,自动判断传入了多少参数,并显示出来。效果如下,
c = C() |
代码如下:
class ShowNum: |