這個世界上存在兩種事物,一種是可以稱作物件的物體,另外一種是物件之間的關系。在一定的范疇里面,物體物件可以看著一種客觀存在,它們的存在不依賴于其它物件。而關系卻不同,關系的存在直接或間接的依賴于物體物件。好比合同里面的甲方乙方可以看作物體物件,而合同作為一種雙方權利義務的描述是一種關系的定義。合同這種關系的存在就依賴于合同背景關系中的物體物件甲方和乙方。而如果甲方或乙方是一個公司,那么公司又可以看作是職員們由各種關系結合起來而構成的復合體。復合體就是由物件按照一定的關系組合而成,可以看作是一個整體的物體。
在面向物件編程語言里面,所有的物體都被看作物件,是西方哲學上一元論的體現。而中國的哲學觀念除了關心物件還重視物件之間的關系,甚至認為關系塑造了物件。將關系引入到面向物件編程語言,創建一種物件-關系共同作用的編程語言,就是這種中國哲學觀念的應用。關系怎么和物件相互作用呢?主要體現在以下幾個方面:1、關系和物件一樣可以被定義。關系作為一個復合體也可以擁有屬性和方法。2、關系可以改變物件的行為,也就是改變物件的屬性和方法。這種改變可以是對物件已有屬性和方法的修改,也可以添加新的屬性和方法,或者洗掉原有的屬性和方法。3、關系依賴于特定物件的,所以關系的生命周期一般短于所依賴的物件。關系被解除后,物件可以恢復原有的方法和屬性。
Python語言的關系型擴展:
Python語言雖然是面向物件的語言,但是其整個語言是高度可定制的。Python語言里面的物件的屬性和方法是在運行時可以改變的,可以對物件實體添加,改變,和洗掉方法和屬性。利用Python語言的這些特性,可以定義一個叫動態物件(DynamicObject)的類。這個類的特點是當其屬性和方法名稱以“x_”開頭的時候,這個屬性和方法就是可以多重系結的。所謂多重系結就是可以不止系結一次,所有系結都保留,但是只有最后一次的系結有效。比方說對于動態物件obj,可以給它系結兩個都叫x_method的方法,這兩個方法都會保存下來,當用obj.x_method()陳述句來呼叫x_method的時候,呼叫的是最后系結的那個方法。如果用del obj.x_method陳述句洗掉obj的x_method方法,洗掉的是最后那個,洗掉后面這個之后,前面的x_method就生效了,這時obj.x_method()呼叫的就是第一次系結的方法。同理,對于屬性也有同樣的行為。有了這樣的一個類之后,其實體及其派生類的實體都會支持動態的屬性和方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/82696.html
