zoukankan      html  css  js  c++  java
  • 类的内置方法

    isinistance(obj, cls)

    检查obj是否是类cls的对象

    class Foo(object):
        pass
    
    obj = Foo()
    
    print(isinstance(obj, Foo))
    

    issubclass(sub,super)

    检查sub类是否是super类的派生类

    class Foo(object):
        pass
    
    class Bar(Foo):
        pass
    
    print(issubclass(Bar, Foo))

    __setitem__,__getitem__,__delitem__

    把对象模拟成像字典对象操作一样的类型

    __getitem__ 查看属性

    class Foo:
        def __init__(self, name):
            self.name = name
    
        def __getitem__(self, item):   # item = "name"  通过字符串访问属性
            # print("getitem...")
            # print(item)
            return self.__dict__.get(item)
    
    obj = Foo("alex")
    # print(obj.__dict__)
    
    # obj.属性
    obj["name"] #按照这种形式取值

    __setitem__ 设置属性

    class Foo:
        def __init__(self, name):
            self.name = name
    
        def __setitem__(self, key, value):  # 设置值
            # print("setitem...")
            # print(key, value)
            self.__dict__[key]=value
    obj = Foo("alex")
    # print(obj.__dict__)
    
    # obj.sex = "male"   # 以前设值(赋值)
    obj["sex"] = "male"
    print(obj.__dict__)
    print(obj.sex)

    __delitem__ 删除属性

    class Foo:
        def __init__(self, name):
            self.name = name
    
        def __delitem__(self, key):   # 删除属性
            # print("delitem..")
            # print(key)
    
            # self.__dict__.pop(key)
            del self.__dict__[key]
    
    
    obj = Foo("alex")
    # print(obj.__dict__)
    
    
    print(obj.__dict__)
    # del obj.name
    del obj["name"]
    print(obj.__dict__) 

    __str__,__repr,__format__

    d = {"name": "egon"}  # 本质上是dict类的实例
    # d = dict({"name": "egon"})
    # print(isinstance(d, dict))
    print(d) #{'name': 'egon'}
    
    
    class Foo:
        pass
    
    obj = Foo()
    print(obj)  #<__main__.Foo object at 0x000001E4EF704B00>
    

    本质是d和obj都是类的实例,但是打印的结果不一样

    __str__方法

    在打印时触发,把返回值以字符串的形式,作为打印的内容

    # __str__方法(一定要返回字符串类型)(打印对象的时候会触发该方法的执行)
    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __str__(self):   # 在打印时触发,把返回值以字符串的形式,作为打印的内容
            # print("----->str")
            return "<name:%s,age:%s>" % (self.name, self.age)
    
    
    obj = People("alex", 20)
    print(obj)   # print(obj.__str__())
    

    __del__ 回收资源

    在对象删除的时候会自动先触发该功能

    # __del__  回收资源(绑定给对象的) 在对象删除的时候会自动先触发该功能
    # f = open("a.text")   # 在应用程序中拿到的是单纯的f,在操作系统中实际上是打开了一个文件
    # f.read()   # 应用程序对操作系统的调用
    # f.close()  # 回收操作系统资源  f 还是存在
    
    
    class Open:
        def __init__(self,filename):
            print("open file.....")
            self.filename = filename
    
        def __del__(self):
            print("回收操作系统资源:self.close()")
    
    f = Open("start.py")
    del f   # f.__del__()  手动
    print("-------main-----")  #  f.__del__() 自动 程序结束python会自动回收掉f(del f),遗留下了操作系统资源。__del__回收操作系统资源
    

      









  • 相关阅读:
    vue中使用v-bind="$attrs"和v-on="$listeners"进行多层组件通信
    django2 用iframe标签完成 网页内嵌播放b站视频功能
    django 分类搜索(根据不同的单选框,改变form提交的地址)
    python datetime 字符串 时间戳
    django 前端模板继承显示model中使用choices的字段
    django2用模板代码图标字体丢失报404 cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff
    在views中引用UserProfile报错RuntimeError: Model class apps.users.models.UserProfile doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
    python3+django2 开发易语言网络验证(下)
    腾讯云centos安装python3.6和pip
    windows使用python原生组件包获取系统日志信息
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/10017700.html
Copyright © 2011-2022 走看看