首页 > 其他 > 详细

内置方法部分

时间:2020-07-11 20:26:58      阅读:35      评论:0      收藏:0      [点我收藏+]

__getattr__是当属性不存在的时候运行

 __setattr__是设置的时候自动运行 低层实现方法self.__dict__[key]=value

__delattr__是删除的时候自动设置 低层实现方法self.__dict__.pop(key)

补充:

上面的是用点方式来使用

__getitem__

__setitem__

__delitem__都是用[] 来用

 

反射

hasattr(object,name)
getattr(object,name,default) 如果查询不到则返回default 如果没有default 那么如果查询不到则报错
setattr(object,keys,values) 可以添加也可以修改 可以添加匿名函数
delattr(object,keys)


授权:
import time
class Open:
    def __init__(self,filename,mode="w",encoding="utf8"):
        self.file=open(filename,mode,encoding=encoding)
        self.mode=mode
        self.encoding=encoding
    def write(self,name):
        self.file.write("%s %s" %(time.strftime("%Y-%m-%d %X"),name))
    def __getattr__(self, item):
        return getattr(self.file,item)

f=Open("123.txt","w")
f.write("123")

 

 

__getattribute__的使用

class Test:
    def __init__(self,s):
        self.s=s
    def __getattr__(self, item):
        print("输出的是getattr")
    def __getattribute__(self, item):
        print("输出的是getattribute")
        raise AttributeError("123")

f=Test(10)
print(f.s)

#输出的是getattribute
#输出的是getattr
#None

无论何时都会触发__getattribute__

 

 

__str__ 与__repr__的使用

class Foo1:
    def __init__(self,name):
        self.name=name
    def __repr__(self):  #与__str__一样
        return "%s %s" %(time.strftime("%Y/%m/%d %X"),self.name)
# 需要实例才可以,类不可以
s1=Foo1("123")
print(s1) #显示的方法都是str(s1)------>s1.__str__
#2020/07/06 16:40:48 123

repr只是在cmd中使用能自动返回

而str需要print才行

 

 

析构函数 __del__

class F:
    def __init__(self,name):
        self.name=name
    def __del__(self):
        print("我执行了")


f=F("ljh")
del f.name
print("_______________>")

#运行结果
# _______________>
# 我执行了

class F:
    def __init__(self,name):
        self.name=name
    def __del__(self):
        print("我执行了")


f=F("ljh")
del f
print("_______________>")

#运行结果
# 我执行了
# _______________>

总结:__del__()是在类结束时自动运行,而实例结束无法自动运行

 

 

 

迭代器协议:

class Foo:
    def __init__(self,name):
        self.name=name
    def __iter__(self):
        return self
    def __next__(self):
        if self.name==15:
            raise AttributeError("错误")
        self.name+=1
        return self.name
s1=Foo(10)
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())

 

内置方法部分

原文:https://www.cnblogs.com/rxybk/p/13285026.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!