ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

内置方法部分

2020-07-11 19:04:54  阅读:188  来源: 互联网

标签:__ 内置 name 方法 self print 部分 s1 def


__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__())

 

标签:__,内置,name,方法,self,print,部分,s1,def
来源: https://www.cnblogs.com/rxybk/p/13285026.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有