python的getattr和setattr

getattr可以取出來某個屬性,這個屬性如果是一個字段,就得到字段的值了,如果是一個方法,就得到這個方法的指針了,然後可以根據方法的指針來調用方法。下面是代碼的例子:

# -*- coding: utf-8 -*-


class AttrTest(object):
    def __init__(self):
        self.__info = "AttrTest:"
        self.field = "invalidField"

    @property
    def Info(self):
        return self.__info

    @Info.setter
    def Info(self, new_value):
        self.__info = new_value

    @Info.deleter
    def Info(self):
        del self.__info

    @staticmethod
    def JoinSM(a, b):
        return str(a) + str(b)

    def JoinX(a, b):
        """這個函數實際上屬於staticmethod,這種定義不太好"""
        return "Join2:" + str(a) + str(b)

    def JoinNSM(self, a, b):
        return self.__info + str(a) + str(b)


if __name__ == "__main__":
    print("============")
    if hasattr(AttrTest, "JoinSM"):
        attr = getattr(AttrTest, "JoinSM")
        print(attr)
        print(attr('abcde', '12345'))
    print("============")
    if hasattr(AttrTest, "JoinX"):
        attr = getattr(AttrTest, "JoinX")
        print(attr)
        print(attr('abcde', '12345'))
    print("============")
    at = AttrTest()
    if hasattr(at, "JoinNSM"):
        attr = getattr(at, "JoinNSM")
        print(attr)
        print(attr('abcde', '12345'))
    print("============")
    if hasattr(AttrTest, "JoinNSM"):
        attr = getattr(AttrTest, "JoinNSM")
        print(attr)
        print(attr(at, 'abcde', '12345'))
    print("============")
    if hasattr(at, "JoinSM"):
        attr = getattr(at, "JoinSM")
        print(attr)
        print(attr("abcde", "12345"))
    print("============")
    if hasattr(at, "Info"):
        print(getattr(at, "Info"))
        setattr(at, "Info", "at:")
        print(getattr(at, "Info"))
    print("============")
    if hasattr(at, "field"):
        print(getattr(at, "field"))
        setattr(at, "field", "validField")
        print(getattr(at, "field"))
    print("============")
    print("WILL EXIT...")
    exit(0)
完。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章