类方法的实例python_Python Class 的实例方法/类方法/静态方法
實例方法、類方法、靜態方法
class MyClass(object):
class_name = "MyClass" # 類屬性, 三種方法都能調用
def __init__(self):
self.instance_name = "instance_name" # 實例屬性, 只能被實例方法調用
self.class_name = "instance_class_name"
def get_class_name_instancemethod(self): # 實例方法, 只能通過實例調用
# 實例方法可以訪問類屬性、實例屬性
return MyClass.class_name
@classmethod
def get_class_name_classmethod(cls): # 類方法, 可通過類名.方法名直接調用
# 類方法可以訪問類屬性,不能訪問實例屬性
return cls.class_name
@staticmethod
def get_class_name_staticmethod(): # 靜態方法, 可通過類名.方法名直接調用
# 靜態方法可以訪問類屬性,不能訪問實例屬性
return MyClass.class_name
def instance_visit_class_attribute(self):
# 實例屬性與類屬性重名時,self.class_name優先訪問實例屬性
print "實例屬性與類屬性重名時,優先訪問實例屬性"
print "self.class_name:", self.class_name
print "MyClass.name:", MyClass.class_name
if __name__ == "__main__":
MyClass.class_name = "MyClassNew"
intance_class = MyClass()
print "instance method:", intance_class.get_class_name_instancemethod()
print "class method:", MyClass.get_class_name_classmethod()
print "static method:", MyClass.get_class_name_staticmethod()
intance_class.instance_visit_class_attribute()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
執行效果
instance method: MyClassNew
class method: MyClassNew
static method: MyClassNew
實例屬性與類屬性重名時,優先訪問實例屬性
self.class_name: instance_class_name
MyClass.name: MyClassNew
1
2
3
4
5
6
7
2. 區別
實例方法
屬于實例的方法
只能通過實例名.方法名調用。
其可以訪問類屬性、實例屬性,類方法、實例方法、靜態方法。
類方法
屬于類類的方法
可以通過實例名.方法名,也可以類名.方法名
其不能訪問實例屬性和實例方法
靜態方法
和類方法很相似,不同的時候定義時要定義(cls)參數
可以通過實例名.方法名,也可以類名.方法名
其不能訪問實例屬性和實例方法
3. 靜態方法與類方法
這兩者非常像,都是源于C++或JAVA中static的思想。不過我覺得,python的靜態方法是從c++和java進化時的一個不完全產物。盡量使用類方法,不使用靜態方法。
python的實例屬性、類屬性對應c++或java中的非靜態屬性和靜態屬性
python的實例方法、類方法對應c++或java中的非靜態方法和靜態方法
下面是一個類方法比靜態方法牛逼的地方
class Color(object):
_color = (0, 0, 0);
@classmethod
def value(cls):
if cls.__name__== 'Red':
cls._color = (255, 0, 0)
elif cls.__name__ == 'Green':
cls._color = (0, 255, 0)
return cls._color
class Red(Color):
pass
class Green(Color):
pass
class UnknownColor(Color):
pass
red = Red()
green = Green()
xcolor = UnknownColor()
print 'red = ', red.value()
print 'green = ', green.value()
print 'xcolor =', xcolor.value()
總結
以上是生活随笔為你收集整理的类方法的实例python_Python Class 的实例方法/类方法/静态方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初学者不建议月python吗_9.pyt
- 下一篇: c++ 获取时间戳_分布式系统理论基础三