<gh_stars>1-10
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# author: bigfoolliu


"""
python反射机制

- 当调用对象中不确定有某个变量或者方法的时候，使用反射机制来操作这个未知的变量或者方法
- 核心本质其实就是利用字符串的形式去对象（模块）中操作（查找/获取/删除/添加）成员，一种基于字符串的事件驱动

python反射中的方法：

1. hasattr，判断对象中是否有这个方法或变量
2. getattr，获取对象中的方法或变量的内存地址
3. setattr，为对象添加变量或方法
4. delattr，删除对象中的变量。注意：不能用于删除方法

https://www.cnblogs.com/kongk/p/8645202.html
"""


class Person(object):

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

    def eat(self):
        pass


def basic_demo():
    """基础示例"""
    person = Person('tony', 12)
    print(hasattr(person, 'name'))  # True
    print(hasattr(person, 'eat'))  # True
    print(hasattr(person, 'talk'))  # False

    print(getattr(Person, 'eat'))  # <function Person.eat at 0x110547400>
    # print(getattr(person, 'talk'))  # AttributeError

    setattr(person, 'score', 100)
    print(person.__dict__)

    # delattr(person, 'eat')  # AttributeError
    delattr(person, 'age')
    print(person.__dict__)


def main():
    basic_demo()


if __name__ == "__main__":
    main()

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# author: bigfoolliu


"""
python反射机制

- 当调用对象中不确定有某个变量或者方法的时候，使用反射机制来操作这个未知的变量或者方法
- 核心本质其实就是利用字符串的形式去对象（模块）中操作（查找/获取/删除/添加）成员，一种基于字符串的事件驱动

python反射中的方法：

1. hasattr，判断对象中是否有这个方法或变量
2. getattr，获取对象中的方法或变量的内存地址
3. setattr，为对象添加变量或方法
4. delattr，删除对象中的变量。注意：不能用于删除方法

https://www.cnblogs.com/kongk/p/8645202.html
"""


class Person(object):

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

    def eat(self):
        pass


def basic_demo():
    """基础示例"""
    person = Person('tony', 12)
    print(hasattr(person, 'name'))  # True
    print(hasattr(person, 'eat'))  # True
    print(hasattr(person, 'talk'))  # False

    print(getattr(Person, 'eat'))  # <function Person.eat at 0x110547400>
    # print(getattr(person, 'talk'))  # AttributeError

    setattr(person, 'score', 100)
    print(person.__dict__)

    # delattr(person, 'eat')  # AttributeError
    delattr(person, 'age')
    print(person.__dict__)


def main():
    basic_demo()


if __name__ == "__main__":
    main()
#!/usr/bin/env python3 # -*- coding:utf-8 -*- # author: bigfoolliu python反射机制  - 当调用对象中不确定有某个变量或者方法的时候，使用反射机制来操作这个未知的变量或者方法 - 核心本质其实就是利用字符串的形式去对象（模块）中操作（查找/获取/删除/添加）成员，一种基于字符串的事件驱动  python反射中的方法：  1. hasattr，判断对象中是否有这个方法或变量 2. getattr，获取对象中的方法或变量的内存地址 3. setattr，为对象添加变量或方法 4. delattr，删除对象中的变量。注意：不能用于删除方法  https://www.cnblogs.com/kongk/p/8645202.html 基础示例 # True # True # False # <function Person.eat at 0x110547400> # print(getattr(person, 'talk'))  # AttributeError # delattr(person, 'eat')  # AttributeError