Python中常用的内建方法:__del__和__dict__使用

版权声明:本文为博主原创文章,未经博主女朋友允许不得转载。 https://blog.csdn.net/qq_26442553/article/details/82466382

     因为python中所有类默认继承object类。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际开发中用户都需要重写后才会使用。对于python来说,属性或者函数都可以被理解成一个属性

1.常用内建属性:__del__

1.__del__的功能与用法:
   1.当删除一个对象时,python解释器会默认这个方法为__del__()方法,用户也可以重写这个方法。
   2.注意:当使用del删除变量指向的对象时,如果对象的引用计数不会1,比如3,那么此时只会让这个引用计数减1,即变为2。
    当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除,具体关于python的GC回收机制。
   3.可以使用del删除绑定的属性,也可以直接删除对象。
 
class Student(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __str__(self):
        print("我是str")
        return "Student(%s,%d)"%(self.name,self.age)

    def __del__(self): #重写父类object的__del__方法,不重写也可以直接使用__del__方法。
        print("__del__方法被调用")
        print("%s对象马上被干掉了..." % self.name)

s1 = Student("JACK",29)
print(s1)
del s1  #注意这里del在外部调用的方式
#print(s1)  NameError: name 's1' is not defined

'''结果如下:
Student(JACK,29)
__del__方法被调用
JACK对象马上被干掉了...
'''
#使用del删除绑定的属性
s1.sex = "male"
print(s1.sex) #male
del s1.sex  #注意这里del在外部调用的方式s
print(s1.sex) #已删报错。


总结:del的使用其实体验了python语言的动态性,可以在运行时绑定属性和方法,也可以在运行时删除属性和方法,甚至删除实例本身。具体参考博客:Python语言的动态性:运行时动态绑定,删除属性和方法

2.常用内建属性:__dict__  

1.__dict__的功能和使用:
   1.__dict__是用来存储对象属性的一个字典,其键为属性名,值为属性的值,类如属性,则字典是空的。
   2.因为类也是对象,所以类和实例都有这个属性。
   3.因为__dict__存储的是对象的属性键值对字典,所以有字典的特性,可以直接用K求V
   4.注意:__dict__存储的类的普通属性,类属性不会放到__dict__中

class Student(object):
    country = "china"  #类属性不会放到__dict__中
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __str__(self):
        print("我是str")
        return "Student(%s,%d)"%(self.name,self.age)

s1 = Student("JACK",29)
print(s1.__dict__)
print(s1.__dict__["name"]) #JACK 
print(Student.__dict__)
'''
{'name': 'JACK', 'age': 29}
JACK
{'__module__': '__main__', '__init__': <function Student.__init__ at 0x0000026A3F637AE8>, 
'__str__': <function Student.__str__ at 0x0000026A3F637B70>, '__dict__': <attribute '__dict__' of 'Student' objects>, 
'__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}

'''

 

猜你喜欢

转载自blog.csdn.net/qq_26442553/article/details/82466382