Python笔记 【无序】 【四】
魔法方法
1.__xx__ 总是被双下划线包围
2.面向对象python的一切 3.能够在适当的时候 自动被调用 构造和析构
__init__(self,……) -----相当于构造方法, 类在实例化对象的时候首先调用的方法 【 可以在此对所有涉及到的变量定义并初始化,避免触发__repr__/__str__魔法方法时,出现异常】 类定义时,有时候写有时不写的原因: 由需求来定!【需要初始化操作时】
比如需要传入两个参数时 ---__init__(self,x,y)
赋值时: self.x = x self.y =y 实例化后对象中的值 = 参数 __init__方法 传回的是None对象,不能在其中return xxx 对象实例化所调用第一个方法是__new__(类【,……】)方法 如果有参数,该参数原封不动的传给__init__方法 极少重写,返回一个实例化对象
但继承不可变类且要修改的时候,要重写: class AAA(str): //由于str不可改变,所以,无法通过__init__方法对其修改,因为__init__自身就是一个不可改变的对象
def __new__(cls,string): //因为str不可修改,所以要在实例化之前调用此方法
string = string.upper()
return str.__new__(cls,string) //让str的__new__方法处理return
析构器__del__(self)
不是用的时候就直接删除,而是 该对象的所有引用均被删除的时候,再del xx就会自动调用该方法 工厂函数 ----就是类对象 类定义好之后,就是类对象
class C:
pass
type(C) --- type
a = int('123') ---返回实例对象 魔法方法中进行算术运算时:
小心无限迭代
class AA(int):
def __add__(self,other)
return int.__add__(self,other) //正确用法
a = AA(3)
b = AA(4)
a+b
7
若 return self + other
则无限迭代 --- "+"触发__add__(self,other)
通过 对指定魔法方法的重写,完全可以让python去实现自己的意图
class int(int):
def __add__(self,other):
return int.__xxx__(self,other)
简单定制
定制计时器的类
使用time模块的localtime方法获得时间
---time模块的详解(时间获取+转换) https://fishc.com.cn/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
time.localtime返回struct_time的时间格式
表现你的类
__str__【 被打印时需要字符串输出的时候,自动触发的魔法方法】
__repr__【
class xx():
def __repr__:
return "xxxxx"
a = xx()
a //直接调用对象时,自动触发的魔法方法
xxxx】 属性访问
class C():
def __init__(self):
self.x = 'yyy'
1.c= C()
c.x //访问属性
2.getattr(a,'b','c') //类,哪个属性,如果没有显示的文字
3.x = property(获得属性的名字,设置,删除) ---以属性的方法访问属性
通过c.x访问别的属性 删除c.x也会删除c.*相应的属性 所有的类的父类都是object类!!!!即使没有明示Xx(y),也是默认
描述符
将某种特殊类型的类【实现以下或其中一个】的实例指派给另一个类的属性
1.__get__(self,instance,owner) //访问属性,返回属性的值
2.__set__(self,instance,value) //将在属性分配【即赋值】中调用,不返回任何内容
3.__delete__(self,instance) //控制删除操作,不反回任何内容
__doc__ ---格式有问题 需要print(xx.__doc__) help(xx)
dir(xx) --查看xx的列表
如果有__all__,可利用xx.__all__过滤没用的,得到主要的 若有__all__,则此处采用from xx import *引入的即是xx.__all__的 __file__属性 ----源代码的位置 类对象实例对象
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
1.__xx__ 总是被双下划线包围
2.面向对象python的一切 3.能够在适当的时候 自动被调用 构造和析构
__init__(self,……) -----相当于构造方法, 类在实例化对象的时候首先调用的方法 【 可以在此对所有涉及到的变量定义并初始化,避免触发__repr__/__str__魔法方法时,出现异常】 类定义时,有时候写有时不写的原因: 由需求来定!【需要初始化操作时】
比如需要传入两个参数时 ---__init__(self,x,y)
赋值时: self.x = x self.y =y 实例化后对象中的值 = 参数 __init__方法 传回的是None对象,不能在其中return xxx 对象实例化所调用第一个方法是__new__(类【,……】)方法 如果有参数,该参数原封不动的传给__init__方法 极少重写,返回一个实例化对象
但继承不可变类且要修改的时候,要重写: class AAA(str): //由于str不可改变,所以,无法通过__init__方法对其修改,因为__init__自身就是一个不可改变的对象
def __new__(cls,string): //因为str不可修改,所以要在实例化之前调用此方法
string = string.upper()
return str.__new__(cls,string) //让str的__new__方法处理return
析构器__del__(self)
不是用的时候就直接删除,而是 该对象的所有引用均被删除的时候,再del xx就会自动调用该方法 工厂函数 ----就是类对象 类定义好之后,就是类对象
class C:
pass
type(C) --- type
a = int('123') ---返回实例对象 魔法方法中进行算术运算时:
小心无限迭代
class AA(int):
def __add__(self,other)
return int.__add__(self,other) //正确用法
a = AA(3)
b = AA(4)
a+b
7
若 return self + other
则无限迭代 --- "+"触发__add__(self,other)

魔法方法中的算术

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
通过 对指定魔法方法的重写,完全可以让python去实现自己的意图
class int(int):
def __add__(self,other):
return int.__xxx__(self,other)
简单定制
定制计时器的类
使用time模块的localtime方法获得时间
---time模块的详解(时间获取+转换) https://fishc.com.cn/forum.php?mod=viewthread&tid=51326&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
time.localtime返回struct_time的时间格式
表现你的类
__str__【 被打印时需要字符串输出的时候,自动触发的魔法方法】
__repr__【
class xx():
def __repr__:
return "xxxxx"
a = xx()
a //直接调用对象时,自动触发的魔法方法
xxxx】 属性访问


class C():
def __init__(self):
self.x = 'yyy'
1.c= C()
c.x //访问属性
2.getattr(a,'b','c') //类,哪个属性,如果没有显示的文字
3.x = property(获得属性的名字,设置,删除) ---以属性的方法访问属性
通过c.x访问别的属性 删除c.x也会删除c.*相应的属性 所有的类的父类都是object类!!!!即使没有明示Xx(y),也是默认
描述符
将某种特殊类型的类【实现以下或其中一个】的实例指派给另一个类的属性
1.__get__(self,instance,owner) //访问属性,返回属性的值
2.__set__(self,instance,value) //将在属性分配【即赋值】中调用,不返回任何内容
3.__delete__(self,instance) //控制删除操作,不反回任何内容
__doc__ ---格式有问题 需要print(xx.__doc__) help(xx)
dir(xx) --查看xx的列表
如果有__all__,可利用xx.__all__过滤没用的,得到主要的 若有__all__,则此处采用from xx import *引入的即是xx.__all__的 __file__属性 ----源代码的位置 类对象实例对象


更多精彩