介紹Jython類(lèi):添加定義類(lèi)屬性及隱藏變量
Jython類(lèi)——添加類(lèi)實(shí)例的屬性
在 Jython 中(與 Java 語(yǔ)言不同),客戶可以在實(shí)例中添加 字段 (也稱為 屬性)。這只改變一個(gè)實(shí)例。要向?qū)嵗砑幼侄危▁),只要在這個(gè)實(shí)例上設(shè)置新值,如下所示:
- x.attr1 = 1
- x.attr2 = 2
- :
- x.attrN = n
Jython類(lèi)——定義類(lèi)屬性和方法
所有在一個(gè)類(lèi)中綁定的變量都是 類(lèi)屬性 (或者變量)。所有在類(lèi)中定義的函數(shù)都是 方法。方法以類(lèi)的一個(gè)實(shí)例,一般稱為 self,作為***個(gè)(也許是惟一的)參數(shù)。例如,要定義一些類(lèi)屬性和方法,可以輸入:
- class MyClass:
- attr1 = 10 # class attributes
- attr2 = "hello"
- def method1(self):
- print MyClass.attr1 # reference the class attribute
- def method2(self, p1, p2):
- print MyClass.attr2 # reference the class attribute
- def method3(self, text):
- self.text = text # instance attribute
- print text, self.text # print my argument and my attribute
- method4 = method3 # make an alias for method3
注意在類(lèi)中,應(yīng)當(dāng)用類(lèi)名限定所有對(duì)類(lèi)屬性的引用(例如 MyClass.attr1),用 self 變量限定所有對(duì)實(shí)例變量的引用(例如 self.text)。在類(lèi)外部,應(yīng)當(dāng)用類(lèi)名限定所有對(duì)類(lèi)屬性的引用(例如 MyClass.attr1),或者用實(shí)例限定對(duì)實(shí)例的引用(例如 x.attr1)和所有對(duì)實(shí)例屬性的引用(例如 x.text,其中 x 是類(lèi)的一個(gè)實(shí)例)。
Jython類(lèi)——隱藏變量
要實(shí)現(xiàn)數(shù)據(jù)隱藏,常常需要?jiǎng)?chuàng)建 “private”變量,它只能被類(lèi)本身訪問(wèn)。 Jython 提供了一個(gè)命名規(guī)范,它使從類(lèi)外部訪問(wèn)屬性和方法很困難。如果聲明以下形式的名字: __xxx 或者 __xxx_yyy (前面有下劃線),那么 Jython 解析器將自動(dòng)拆分(mangle)所聲明的名字(即加上類(lèi)名),從而創(chuàng)建隱藏的變量。例如:
- class MyClass:
- __attr = 10 # private class attribute
- def method1(self):
- pass
- def method2(self, p1, p2):
- pass
- def __privateMethod(self, text):
- self.__text = text # private attribute
注意與 C++ 和 Java 語(yǔ)言不同,對(duì)實(shí)例變量的所有引用都必須用 self 限定,不會(huì)隱式使用 this。
【編輯推薦】