python中哪些是无序_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)

ee14d8c18f69e9fd8d60e6a270eebf62.png

魔法方法中的算术

1078de0b78f41bad4be1e23029738893.png

通过对指定魔法方法的重写,完全可以让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】

属性访问

f112645894b69a2ff878843ab5f5bf1b.png

097c89fefe41f36c87a62c0671c995a4.png

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__属性   ----源代码的位置

类对象实例对象

fdd21114db1360dbd406820c09533b54.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值