反射 内置方法

   反射~~~

  反射  使用字符串数据类型的变量名来获取这个变量的值

反射类中的变量: 静态属性  类方法   静态方法

class Foo:
    school = 'qinghua'      #静态属性
    country = 'China'
    language = 'English'

    @classmethod             #类方法
    def class_method(cls):
        print(cls.school)
    @staticmethod            #静态方法
    def static_method():
        print('666666666')
    def wahaha(self):
        print('wahaha')
A = Foo()
A.wahaha()

Foo.wahaha(1)
A.class_method()
Foo.class_method()

Foo.wahaha()
Foo.static_method()
Foo.class_method()
while 1:
    inpu = input('>>>')           # 直接类名+inpu的 输入一个 打印一个
    print(getattr(Foo,inpu))

##if inpu == 'school':print(Foo.school)    #如果输入的是school 就打印old_boy
print(getattr(Foo, 'school'))             #反射 类名 + 字符串"静态属性名"

Foo.class_method()
getattr(Foo, 'class_method')()
Foo.static_method()
getattr(Foo,'static_method')()
print(getattr(Foo, 'wahaha')(1)) #不推荐用类名去反射一个方法名
print(hasattr(Foo, 'wahaha'))

反射对象中的变量  对象属性   普通方法

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

    def eat(self):
        print('%s is eat' % self.name)
p1 = Foo('alexsb',30)
print(getattr(p1, 'name'))
print(getattr(p1, 'age'))
getattr(p1,'eat')()

alexsb
30
alexsb is eat

普通的给文件名 变更  和getattr方法

import os
os.rename('English','English777')
getattr(os,'rename')('English777','china')

本文件反射

  import sys

  getattr(sys.modules[name],'所有定义在这个文件中的名字')

   setattr 给命名空间的某一个名字设置一个值

    delattr   删除某一个命名空间中变量对应的值

 

内置方法 

  不用特别去调用这个方法就可以触发这个方法的执行

class Foo:
    def __str__(self):
        return 'abcd'
    def __repr__(self):
        return 'dcba'
obj = Foo()

__str__ :

    print(obj)  打印触发

    ‘%s’ % obj   格式化输出触发

    str()  强转触发

__repr__:

    '%r' % obj

    repr(obj)

posted @ 2018-09-03 19:36  一个稳定抗压的人  阅读(131)  评论(0编辑  收藏  举报