• 反射:hasattr、getattr、setattr、delattr


    hasattr、getattr比较重要

    反射:可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用反射。

    反射有四种方法:

    hasattr:hasattr(object,name)判断一个对象是否有name属性或者name方法。有就返回True,没有就返回False

    getattr:获取对象的属性或者方法,如果存在则打印出来。hasattr和getattr配套使用

        需要注意的是,如果返回的是对象的方法,返回出来的是对象的内存地址,如果需要运行这个方法,可以在后面添加一对()

    setattr:给对象的属性赋值,若属性不存在,先创建后赋值

    delattr:删除该对象指定的一个属性

    hasattr 和getattr

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    class Foo:
        def __init__(self):
            self.name = 'egon'
            self.age = 51
        def func(self):
            print('hello')
    egg = Foo()
    print(hasattr(egg,'name'))  #先判断name在egg里面存在不存在
    print(getattr(egg,'name')) #如果为True它才去得到
    print(hasattr(egg,'func'))
    print(getattr(egg,'func'))  #得到的是地址
    # getattr(egg,'func')()  #在这里加括号才能得到,因为func是方法
    if hasattr(egg,'func'):
     getattr(egg,'func')()
    else:
     print('没找到')
    hasattr和getattr
    class Foo:
        def __init__(self):
            self.name = 'egon'
            self.age = 51
        def func(self):
            print('hello')
    egg = Foo()
    setattr(egg,'sex','')
    print(egg.sex)
    #
    # 2.
    def show_name(self):
        print(self.name+'sb')
    setattr(egg,'sh_name',show_name)
    egg.sh_name(egg)
    show_name(egg)
    #egonsb
    #egonsb
    setattr
    delattr(egg,'name')
    print(egg.name)
    delattr
  • 相关阅读:
    转】Apache解决高并发和高可用
    Kafka学习(一)配置及简单命令使用
    unity3d教程动态创建简单平面地形
    LeetCode: Unique Binary Search Trees [095]
    德惠也有星巴克
    一个css和js结合的下拉菜单,支持主流浏览器
    【图像处理】人类视觉成像原理
    windows使用nginx+memcached实现负载均衡和session或者缓存共享
    OpenCV基础篇之画图及RNG随机数对象
    在阿里云上布置git server
  • 原文地址:https://www.cnblogs.com/zhaojingyu/p/9057589.html
Copyright © 2020-2023  润新知