細說python類2 類動態新增方法和slots

2021-07-09 16:35:42 字數 1129 閱讀 4879

先說一下類新增屬性方法和例項新增屬性和方法的區別,

類新增屬性屬於加了乙個以類為全域性的屬性(據說叫靜態屬性),那麼以後類的每乙個例項化,都具有這個屬性。給類加乙個方法也如此,以後類的每乙個例項化都具備這個方法(但是據說叫動態方法。)但是給例項加乙個屬性,作用域就是這個例項,是與類沒關係的(據說這種屬性叫動態屬性)。

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 很顯然以上第一...