Python 第十五天学习笔记

今天终于要开始学习魔法方法了,上周一的讨论班时就开始看, 到今天才正式能看进去。。

温故知新,稳扎稳打,不要急

第十二章  魔法方法

__init__(self) 方法

需要注意两点:

class Rectangle:
    def __init__(self,x,y):                 首先要对变量进行这样的一个调用说明
        self.x = x
        self.y = y                            

    def getperi(self):
        return self.x + self.y          
    def getarea(self):
        return self.x * self.y


__init__ 方法的返回值一定是None,不能是其他



__new__(cls)  方法

需要返回一个实例对象

class Capstr(str):
    def __new__(cls,string):
        string = string.upper()    全部变成大写
        return str.__new__(cls,string)        返回str.__new__(cls,string),是一个具体的实例对象


__del__(self)

当对象要被销毁时,这个方法就会被调用,注意:是所有和这个有关的变量

(我的浅显的理解只能到这儿了,,,)


BIF(builtin function or function)内置函数或方法

int( )           整形

float( )        浮点型

str( )           字符串

list( )           列表

tuple( )       元组


反运算

__radd__(self,other)

但是要注意,反运算分主动和被动,如果a对象的魔法方法没有实现或者不支持相应的操作,Python就会自动调用b的魔法方法

class Nint(int):
def __radd__(self,other):

return int.__radd__(self,other)

a = Nint(5)

b = Nint(3)

那么 a + b  结果应该是5+3 = 8   因为a 的魔法方法“+” 触动了 __add__

而    1 + b  ,1的魔法方法找不到,所以找b的魔法方法,触动 __radd__ ,结果是 b - 1 = 3 - 1 = 2

(反运算里,self是b, other 是 1, 所以是 b -1)


class Nint(int):
def __rsub__(self,other):

return int.__sub__(self,other)

a = Nint(5)

3 - a = ?  

3找sub没有找到,就去找a的rsub,此时a是self,3是other,即 a - 3 = 5 - 3 = 2


增量赋值运算

a = a + b

a + = b


一元操作符

__neg__(self)        定义正号的行为

__pos__(self)        定义负号的行为

__abs__(self)        取绝对值

__invert__(self)     定义接位求反的行为


下次看44 简单定制

课后习题:

2 什么时候我们需要在类中明确写出 __init__方法?

当我们的实例对象需要有明确的初始化步骤的时候,可以在__init__方法中部署初始化的代码



class C2F(float):
    def __new__(cls,arg=0.0):
        return float.__new__(cls,arg*1.8+32)


下次看188 鸭子类型

猜你喜欢

转载自blog.csdn.net/weixin_41151172/article/details/79964055