普通方法: 沒有參數,只能類調用
綁定方法: (1)綁定到對象(自動傳遞對象參數) (2)綁定到類(自動傳遞參數)
靜態方法: 不管是類仍是對象,都能調用的方法
#例:
class Dog():
def __init__(self,name):
self.name = name
#普通方法
def jiao():
print("小狗會叫")
#綁定到對象方法
def tian(self):
print("小狗喜歡舔骨頭")
#綁定到類方法
@classmethod
def chi(cls):
print(cls)
print("小狗喜歡吃肉")
#靜態方法
@staticmethod
def jump():
print("小狗喜歡跳起來接飛盤")
#實例化對象
obj = Dog("小黑")函數
Dog.jiao()
#對象沒法調用,只能用類.方法spa
obj.tian()
#Dog.tian(123) #若是硬要使用類來調用,知足實參一一對應(隨機加個值)對象
Dog.chi()
# 用對象調用綁定到類的方法是能夠的
# 先找出該對象所歸屬的類是誰,而後再傳遞這個類
obj.chi()繼承
obj.jump()
Dog.jump()文檔
#例:字符串
class Human():
pass
class Man():
pass
class Woman():
passget
class Children(Man, Woman):
'''
類的功能: 描述一個小孩
類的成員屬性: eye
類的成員方法: sleep __beat_doudou
'''
eye = "藍色的眼睛"
#普通方法
def eat():
print("小孩須要多吃有養分的東西")
#綁定方法
def sleep(self):
print("小孩喜歡睡覺")
def drink(self):
print("小孩要常常喝水")
def cry(self, func):
res = func.__name__
print(res, type(res))
#私有綁定方法
def __beat_doudou(self):
print("小孩喜歡打豆豆")
#__dict__ 獲取對象或類的內部成員結構
obj = Children()
res = obj.__dict__
# __dict__ 歸屬是類的.全部用對象是沒有辦法查看類的內部成員結構的
print(res) #因此res爲空
print(Children.__dict__)
# __doc__ 獲取對象或類的內部文檔
res = Children.__doc__
print(res)
'''
輸出結果:
類的功能: 描述一個小孩
類的成員屬性: eye
類的成員方法: sleep __beat_doudou
'''
# __name__ 獲取類名函數名
def myfunc():
print("我是函數")
obj.cry(myfunc) # myfunc <class 'str'>
# __class__ 獲取當前對象所屬的類
res = obj.__class__
print(res) #<class '__main__.Children'>
# __bases__ 獲取一個類直接繼承的全部父類,返回元組
res = Children.__bases__
print(res)input
概念:經過字符串去操做類對象 或者 模塊中的屬性方法
(1)類中的反射
hasattr() 檢測對象/類是否有指定的成員
getattr() 獲取對象/類成員的值
setattr() 設置對象/類成員的值
delattr() 刪除對象/類成員的值it
(2)模塊的反射
sys.modules 返回一個系統字典,字典的鍵是加載的全部模塊class
# (1)hasattr() 檢測對象/類是否有指定的成員 [以是否可以自動調用爲基準]
#用的是二中的obj
res = hasattr(obj, "eye")
print(res)
res = hasattr(Children, "eat")
print(res) # 返回True說明存在
# (2)getattr() 獲取對象/類成員的值
res = getattr(obj, "eye")
print(res) # 藍色的眼睛
res = getattr(obj, "sleep")
print(res) # 它返回的是一個綁定方法
res() # 小孩喜歡睡覺
# 類的方式
res = getattr(Children, "eat")
print(res)
res() # 小孩須要多吃有養分的東西
res = getattr(Children, "sleep")
print(res) # 它不是一個綁定方法,全部必定須要用類的方式
res(1)
#(3)getattr 第三個參數可選若是獲取不到這個值,能夠添加默認提示,預防報錯
res = getattr(obj, "abc", "對不起這個真沒有")
print(res)
# strvar = input("請輸入您要調用的函數:")
# if hasattr(obj,strvar):
# res = getattr(obj,strvar)
# res()
# (3)setattr() 設置對象/類成員的值
setattr(obj, "hair", "黑色")
print(obj.hair)
setattr(Children, "skin", "綠色")
print(Children.skin)
# (4)delattr() 刪除對象/類成員的值
delattr(obj, "hair")
# print(obj.hair)
delattr(Children, "skin")
# print(Children.skin)
#sys.modules 返回一個系統字典,字典的鍵是加載的全部模塊
#例3:import sysres = sys.modulesprint(res)print(__name__) # __main__ 是不是主文件運行mymodule = sys.modules[__name__]print(mymodule) #打印主模塊def func1(): print("這是func1方法")def func2(): print("這是func2方法")def func3(): print("這是func3方法")# 用戶給我字符串,我反射對應的方法調用while True: strvar = input("請輸入您要調用的方法:") if hasattr(mymodule, strvar): _func_ = getattr(mymodule, strvar) _func_() # 注意這個函數會繼承您輸入的函數, # 全部若是輸入_myfunc會打印上一個函數的內容,全部這個函數名取得特殊一點 else: print("大哥,沒有")