※ 引述《sustainer123 (溫水佳樹的兄長大人)》之銘言:
: Instance Methods
: 實例方法 就class最常見那個
: def foo(self)
: 要有物件實例才能運行
: 也就是說:
: class.foo() #type error
: obj = clsss()
: obj.foo() #ok
: 實例方法就是把實例本身傳給參數
: obj.foo() == foo(obj)
: 透過self 實例方法可以修改同一對象的屬性
: Class Methods跟Static Methods明天再寫
: 反正我文章也還沒看完
沒寫好 修改一下
實例方法可以修改類變量也能修改實例變量
ex:
class Test(object):
class_attribute = 0
def __init__(self, value):
self.instance_attribute = value
def instance_method(self):
self.instance_attribute += 1
Test.class_attribute += 1
if __name__ == '__main__':
print(Test.class_attribute) # 0
t1 = Test(10)
t1.instance_method()
print(t1.class_attribute) # 1
print(t1.instance_attribute) # 11
t2 = Test(0)
t2.instance_method()
print(t1.class_attribute,t2.class_attribute) #2 2
大抵如此 不同實例共用類變量 然後能直接改類變類
但不同實例不共用實例變量
classmethods
類方法
py透過裝飾器實現
@classmethods
類方法就把類丟進參數
以上面的code當例子
假設類方法為class_methods()
你可以t1.class_methods()
也可以Test.class_methods()
實際上傳入的參數長這樣:
class_methods(<class '__main__.Test'>)
類方法就是把類本身丟進參數
他可以直接修改類變量 但不能直接修改實例變量
假如你希望類方法修改實例變量 你必須傳遞實例做為類方法的參數
大概這樣ㄅ staticmethod起床再說