日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

类方法的实例python_Python Class 的实例方法/类方法/静态方法

發布時間:2024/9/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类方法的实例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 的实例方法/类方法/静态方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。