反射getattr

@property   將類中的方法假裝成屬性

與@property相關的倆個   @方法.setter   修改操做    @方法.deleter   刪除一個property屬性的時候會執行被deleter裝飾的方法網絡

 在類的命名空間有什麼:函數

  靜態屬性,spa

  方法(動態屬性),code

  @property方法對象

  類方法(@classmethod)blog

    類方法的默認參數:cls,指的是調用這個方法的類名ip

    類方法的調用方式:經過類名.類方法調用,本質就是方法  字符串

    應用場景:若是你的整個方法中都沒有用到對象命名空間中的名字,且你用到了類的命名空間中的名字(普通方法和property方法除外)get

  靜態方法(@staticmethod,)input

    這個函數不須要默認參數self,cls

    靜態方法的調用方式:經過類名.方法調用,本質是函數

    應用場景:函數在類中定義的時候,即類中函數

isinstance:判斷對象與類直接的關係

  判斷這個對象是否是類的對象,這個類子類的對象

issubclass(a,b):判斷類與類之間的關係,(ab都必須是類,不然報錯)

  判斷這個類a是否是另外一個類b的子類

反射 getattr  

  使用:getattr(變量名(命名空間),字符串(屬於一個命名空間的變量名))

  定義:反射 指使用字符串數據類型的變量名來獲取這個變量的值

  應用場景:

    input:用戶輸入

    文件:從文件中讀出的字符串,想轉換成變量的名字

    網絡:將網絡傳輸的字符串轉換成年糕變量的名字

反射類的變量:靜態屬性,類方法,靜態方法

class Foo:
    School = "oldboy"
    County = "China"
    Language = "Chiness"
    @classmethod
    def class_method(cls):
        print(cls.School)
    def name(self):
        print("alex")
a = Foo()
while True:
    ch = input(">>>>>>>>>:").strip()
    if hasattr(a,ch):       #has 判斷對象中是否存在這個方法
        getattr(a,ch)()     #執行方法

反射對象中的變量:對象屬性,普通方法

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def eating(self):
        print("%s is eating"%self.name)
a = Foo("lin",23)
if hasattr(a,"name"):
    print(getattr(a, "name"))   #lin is eating
getattr(a,"eating")()   #lin is eating

反射文本中的變量 

import sys

sys.modules[__name__]    #反射本文件中的變量,固定使用這個命名空間

import sys  #加載sys模塊
a = 1
b = 2
name ="alex"
def hello():
    print("hello word")
print(getattr(sys.modules[__name__], "a"))
getattr(sys.modules[__name__],"hello")()

hasattr   (a,"b") 判斷對象中有沒有「b」這個方法,與getattr配合使用,防止報錯

setattr (a,"b",c) 接受三個參數,命名空間,「變量名」,變量值

  

class Foo:
    Country = "China"
def func():
    print("hello world")
Foo.Shool = "old boy"
setattr(Foo,"teacher","alex")   #Foo.Shool = "old boy"與他做用相同,都是給類中增長屬性
print(Foo.__dict__) # 'Country': 'China','Shool': 'old boy', 'teacher': 'alex'等

delattr   (a,"b")   刪除命名空間中b這個屬性,若是沒有會報錯

class Foo:
    Country = "China"
def func():
    print("hello world")
Foo.Shool = "old boy"
del Foo.Country
print(Foo.__dict__)
delattr(Foo,'Country')      #del Foo.Country做用是同樣的
print(Foo.__dict__)
相關文章
相關標籤/搜索