码迷,mamicode.com
首页 > 编程语言 > 详细

python入行033(反射)

时间:2020-04-20 13:41:06      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:初始化   mode   字符串   bsp   如何使用   ict   列表   print   pre   

1 反射

  python是动态语言,反射指的是在程序运行过程中可以“动态”的获取对象的属性。

  可以先通过内置函数dir来获取任意一个类或者对象的属性列表,列表中全为字符串格式;再使用内置的四个函数就可以通过字符串来操作对象属性了。

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say(self):
        print(<%s:%s> % (self.name, self.age))


obj = People(辣白菜同学, 18)
print(obj.name)
print(obj.__dict__[dir(obj)[-2]])
>>> 辣白菜同学
>>> 辣白菜同学

  四个内置函数的使用:

print(hasattr(obj, say))
>>> True
print(getattr(obj, name))
>>> 辣白菜同学
setattr(obj, name, 土豆同学)
print(obj.__dict__)
>>> {name: 土豆同学, age: 18}
delattr(obj, name)
print(obj.__dict__)
>>> {age: 18}

2 内置方法

2.1 什么是内置方法

  定义在类内部,以__开头并以__结尾的方法;会在某种情况下自动触发执行。

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age


obj = People(辣白菜同学, 18)  # 调用类的时候自动执行__init__方法,初始化对象属性
print(People.__init__)
>>> <function People.__init__ at 0x000002B2E7E1CD08>

2.2 为何要用内置方法

  为了定制化我们的类or对象。

2.3 如何使用内置方法

  (1)__str__()  在打印对象时会自动触发,然后将返回值(必须是字符串类型)当做本次打印的结果输出

class People:
def __init__(self, name):
self.name = name

def __str__(self):
return "%s" %(self.name)


obj = People(‘辣白菜同学‘)
print(obj)
>>> ‘辣白菜同学‘
# python中一切皆对象,这也就解释了为什么我们在调用str类实例化对象时,打印对象能够直接打印出对象的属性值
obj = str(mrz)
print(obj)
>>> mrz

  (2)__del__()

# __del__:在清理对象时触发,会先执行该方法
class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        # self.x = open(‘a.txt‘,mode=‘w‘)
        # self.x = 占据的是操作系统资源

    def __del__(self):
        print(run...)
        # 发起系统调用,告诉操作系统回收相关的系统资源
        # self.x.close()
#
obj = People(辣白菜同学, 18)
del obj # obj.__del__()
print(============>)
>>> run...
>>> ============>

 

python入行033(反射)

标签:初始化   mode   字符串   bsp   如何使用   ict   列表   print   pre   

原文地址:https://www.cnblogs.com/mmmmmrz/p/12707541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!