类的内置方法

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__回收操作系统资源

  









原文地址:https://www.cnblogs.com/fantsaymwq/p/10017700.html