反射 內置方法
阿新 • • 發佈:2018-09-03
repr sel 格式化輸出 obj int 內置 文件 .class school
反射~~~
反射 使用字符串數據類型的變量名來獲取這個變量的值
反射類中的變量: 靜態屬性 類方法 靜態方法
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_boyprint(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)
反射 內置方法