物件導向高階特性之 slots

2021-10-02 02:52:13 字數 1790 閱讀 2252

動態語言:可以在執行的過程中,修改**

靜態語言:編譯時已經確定好**,執行過程中不能修改

python允許在定義class的時候,定義乙個特殊的__slots__變數,來限制該class例項能新增的屬性

使用__slots__時注意:__slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的

import time

class

date

(object):

#__slots__來限制該物件能新增的屬性資訊,,即除了顯示的年、月、日,不可以再新增時間屬性,否則報錯

__slots__ =

'__year'

,'__month'

,'__day'

def__init__

(self, year,month,day)

: self.__year=year #不用new是因為自動將父類的new方法繼承過來,自動例項化物件

self.__month=month

self.__day=day

@property

#類屬性

defyear

(self)

:return self.__year

@property

defmonth

(self)

:return self.__month

@property

defday

(self)

:return self.__day

@classmethod

deftoday

(cls)

: time_t=time.localtime(

)return cls(time_t.tm_year,time_t.tm_mon,time_t.tm_mday)

def__str__

(self)

:return

'%s-%s-%s'

%(self.__year,self.__month,self.__day)

"""import time 獲取當前時間的三種方法

time.localtime()-->tm_year=2020,tm_mon=1,tm_mday=5,tm_hour=15

time.time()--->1578208092.4181762

time.ctime()--->sun jan 5 15:08:16 2020

"""d=date(

2019,10

,10)print

('物件型別:'

,type

(d))

print

('判斷是否有year這個屬性?'

,hasattr

(d,'year'))

print

('判斷是否有time這個屬性?'

,hasattr

(d,'time'))

#setattr(d,'time','10;10:10')

#print('time:',getattr(d,'time'))

print

(date.today(

))

結果

物件型別: <

class

'__main__.date'

>

判斷是否有year這個屬性? true

判斷是否有time這個屬性? false

2020-1

-11

PHP物件導向高階特性

1 在 任何處直接使用,不需要在物件中傳遞例項 2 每個例項都可以訪問類中的靜態屬性。不用為了獲取簡單的功能而例項化物件 3 在靜態方法中例項物件進行操作,那麼在不例項化的情況下獲取新的物件 4 靜態變數可以通過類修改,但常量不可改 類的屬性改變會影響它所有的例項 class parents a n...

物件導向高階特性部分總結

繼承規則 在構造方法中,呼叫構造方法可以使用this和super關鍵字。package test2 author xiaochen public class animal public animal string string public void test package test2 autho...

物件導向高階特性之 抽象基類

import abc class human metaclass abc.abcmeta 基類,定義乙個抽象類 abc.abstractmethod defintroduce self print introduce.abc.abstractmethod defhello self print he...