先說一下類新增屬性方法和例項新增屬性和方法的區別,
類新增屬性屬於加了乙個以類為全域性的屬性(據說叫靜態屬性),那麼以後類的每乙個例項化,都具有這個屬性。給類加乙個方法也如此,以後類的每乙個例項化都具備這個方法(但是據說叫動態方法。)但是給例項加乙個屬性,作用域就是這個例項,是與類沒關係的(據說這種屬性叫動態屬性)。
python類的例項可以動態的新增屬性。舉個例子,宣告乙個類a
>>> class a(object):
... def __init__(self):
... print 'a'
例項化乙個a,
a=a()
現在給a加乙個name屬性
>>> a.name='aaa'
>>> a.name
'aaa'
現在給a類加乙個方法
>>> def func():
... print 'func'
>>> a.func=func
>>> a.func
>
>>> a.func()
func
那麼slots可以做什麼呢?slots可以防止給例項隨意加乙個屬性。
>>> class a(object):
... def __init__(self):
... print 'func'
... __slots__=('name')
當我們修改name屬性時,name被修改為aaa,
>>> a=a()
>>> a.name='aaa'
>>> a.name
'aaa'
但當我們想動態新增乙個age屬性時,報錯了
>>> a.age=16
traceback (most recent call last):
file "", line 1, in
attributeerror: 'a' object has no attribute 'age'
但是當你想如下這樣給類加乙個屬性的話,slots就不能限制了。
>>> a.age=3
這裡要說一下,如果子類繼承父類,父類裡面有slots,這個slots是在子類裡面不起作用的,如果想用,只能重寫slots,達到想要的結果。
細說python類3 類的建立過程
先來介紹一下python的 call 函式,call的作用是什麼呢?舉個例子來說明一下 class a object def init self print a def call self print call a a a a call 據說a 這麼使用的時候相當於執行a.call 我們暫且這麼理解...
類的動態載入 2
1.通過new建立物件是靜態載入,如圖一,假如此時word類和excel類並不存在,office類是不可以通過編譯的,再假如乙個類中要對很多類進行例項化,都是通過new例項化的,那麼,但凡有乙個類出問題了,那麼整個大類就不會通過編譯。2.如圖二,我們使用的是動態載入類的方法,在編譯此類時,並不會載入...
反射2 動態載入類
動態載入 和靜態載入的區別 class.forname 類的全稱 編譯時刻載入類是靜態載入類,執行時刻載入類是動態載入類。package dog public class animal if cat equals args 0 package dog public class dog 很顯然以上第一...