python的实例属性和静态属性表_Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法...
類屬性可以直接在方法中賦值,但
一、調用該屬性時,必須先調用該方法;
二、與 init 方法區別是,init方法只初始化一次,初始化完成后作為全局變量。在方法中賦值屬性,每次調用該方法,該屬性初始化一次。
如下面例子:
class A:
def a(self):
self.b=1
aa=A()
aa.b
Traceback (most recent call last):
File "D:\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2862, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "", line 1, in
aa.b
AttributeError: 'A' object has no attribute 'b'
aa.a()
aa.b
Out[6]: 1
aa.b=2
aa.b
Out[8]: 2
aa.a()
aa.b
Out[10]: 1
屬性分為實例屬性與類屬性
一:屬性:
盡量把需要用戶傳入的屬性作為實例屬性,而把同類都一樣的屬性作為類屬性。實例屬性在每創造一個實例時都會初始化一遍,不同的實例的實例屬性可能不同,不同實例的類屬性都相同。從而減少內存。 ?###共性就設為類屬性,個性的設置為實例屬性!!!!
1:實例屬性:
最好在__init__(self,...)中初始化
內部調用時都需要加上self.
外部調用時用instancename.propertyname
2:類屬性:
在__init__()外初始化
在內部用classname.類屬性名調用
外部既可以用classname.類屬性名又可以用instancename.類屬性名來調用
3:私有屬性:
1):單下劃線_開頭:只是告訴別人這是私有屬性,外部依然可以訪問更改
2):雙下劃線__開頭:外部不可通過instancename.propertyname來訪問或者更改
實際將其轉化為了_classname__propertyname
二:方法
1:普通類方法:
def fun_name(self,...):
pass
外部用實例調用
2:靜態方法:@staticmethod
不能訪問實例屬性!!! ? 參數不能傳入self!!!
與類相關但是不依賴類與實例的方法!!
3:類方法:@classmethod
不能訪問實例屬性!!! ? 參數必須傳入cls!!!
必須傳入cls參數(即代表了此類對象-----區別------self代表實例對象),并且用此來調用類屬性:cls.類屬性名
*靜態方法與類方法都可以通過類或者實例來調用。其兩個的特點都是不能夠調用實例屬性
e.g1:
classA:
member='this is a test'
def __init__(self):pass@classmethoddefPrint1(cls):print('print 1:',cls.member)defPrint2(self):print('print 2:',self.member)
@classmethoddefPrint3(paraTest):print('print 3:',paraTest.member)
@staticmethoddefPrint4():print('hello')
a=A()print(a.Print1())print(a.Print2())print(a.Print3())print(a.Print4())#print 1: this is a test#None#print 2: this is a test#None#print 3: this is a test#None#hello#None
member和init下定義的實例屬性區別不大,一個是自帶的(每個實例固定死),一個是初始化的(作為參數傳遞進實例)。
總結:類屬性與類方法是類固有的方法與屬性,不會因為實例不同而改變,寫他們的目的是減少多實例時所創造出來的內存空間,加快運行速度。
一個常見的錯誤
在介紹具體的模板函數之前先看一個常見的錯誤
我通俗易懂的總結一下:Python中的對象分為可變對象(如dict、list等數據容器)以及不可變對象(如str、int等
數據類型),在init之上定義的可變對象變量在實例初始化的時候會直接指向該類的同名變量,導致多個實例間共
享了同一個數據容器,也就會導致各種詭異的出錯情況。
為了解決這個問題,請將所有可變變量的定義(尤其是list、dict等數據容器),放到init函數中(不要放在類的成
員定義中)。vnpy
總結
以上是生活随笔為你收集整理的python的实例属性和静态属性表_Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python导入自定义文件_python
- 下一篇: python蟒蛇绘制实例分析_011 实