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

歡迎訪問 生活随笔!

生活随笔

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

python

python 类静态属性_如何从Python中的类中引用静态属性?

發布時間:2025/3/8 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 类静态属性_如何从Python中的类中引用静态属性? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

您面臨的問題是因為您不了解類聲明的作用域是如何工作的。類聲明在其自己的作用域內執行。執行完成后,將創建一個新的類對象,并將獲得的范圍作為其__dict__附加到該類。在

注意:類范圍是從方法范圍內搜索的而不是!這意味著當在方法定義中時,必須將類屬性引用為MyClass.attribute。在

例如:class MyClass:

var = 1

# we are executing this code as a single block

# so you must reference the variable as is usual

print(var)

# default values are *not* inside the definition.

# they are evaluated in the outer scope, so use plain "var" here

def method(self, a_default=var):

print(a_default)

def other_method(self):

# inside methods you are in a different scope

print(MyClass.var)

# equivalent *if* no "var" instance attributes exists

print(self.var)

注意:由于該類在執行其聲明時仍然不存在,因此無法在MyClass聲明的“頂層”引用MyClass:

^{pr2}$

其副作用是以下代碼:class MyClass:

x = 1

results = list(i+x for i in range(10))

產生:NameError Traceback (most recent call last)

in ()

> 1 class MyClass:

2 x = 1

3 results = list(i+x for i in range(10))

4

in MyClass()

1 class MyClass:

2 x = 1

> 3 results = list(i+x for i in range(10))

4

in (.0)

1 class MyClass:

2 x = 1

> 3 results = list(i+x for i in range(10))

4

NameError: name 'x' is not defined

因為生成器表達式(以及python3中的列表理解)實際上被認為是具有自己作用域的函數。由于沒有從內部函數作用域搜索類范圍,因此找不到x。在

您可以使用函數定義和默認值來解決此問題:class MyClass:

x = 1

def _make_results(x=x):

return list(i+x for i in range(10))

results = _make_results()

del _make_results # otherwise it would be added as a method.

# or:

results = (lambda x=x: list(i+x for i in range(10)))()

這通常不是問題,因為類定義很少包含方法定義和一些常量之外的任何內容。在

關于類作用域,已經有一些問題:

總結

以上是生活随笔為你收集整理的python 类静态属性_如何从Python中的类中引用静态属性?的全部內容,希望文章能夠幫你解決所遇到的問題。

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