動態語言:可以在執行的過程中,修改**
靜態語言:編譯時已經確定好**,執行過程中不能修改
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...