靜態
- 不需要instance便可以使用
- 可以不帶裝飾器,呼叫都是使用class存取
無法存取類別或實例屬性
class cls1(): a = 1 @staticmethod def output(): print("I have decorator") def output2(): print("I don't have decorator") # usage cls1.output() cls1.output2()
類別
- 不需要instance便可以使用
- 類別變數是所有類別共用,可以用class 或 instance 存取
如果不帶裝飾器,在使用時須要把類別作為參數傳入
class cls1(): a = 1 @classmethod def output(cls): print("I have decorator") print(cls.a) def output_without_decorator(cls): print("I don't have decorator") # usage cls1.output() cls1.output_without_decorator(cls1) print(cls1.a) # 1 inst = cls1() print(inst.a) # 1
實例
- 實例方法需要傳入self(即instance),其名稱是可以自定義的
- 可以建立與類別變數名稱相同的實例變數,這並不影響類別屬性
- Instance在找變數時會先依續尋找: instance 屬性> class屬性
class cls1():
a = 1
def output(self):
print(self.a)
self.a = 2
print("I have decorator")
print(self.a)
# usage
inst = cls1()
inst.output() # 1, I have decorator, 2
print(inst.a) # 2
print(cls1.a) # 1