python 關於物件的幾個重點
A. 物件基本
class Person(object):
name = ''
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
def set_name(self):
self.name = name
me = Person('eric')
print me.get_name()
--> eric
Important facts:
class Person(object):
name = ''
def __init__(self, name):
self.name = name
def get_name(self):
return self.name
def set_name(self):
self.name = name
me = Person('eric')
print me.get_name()
--> eric
Important facts:
- 在Person類別下定義了三個函式 __inti__ , get_name, set_name
- 每個函式的第一個參數是self, 用來指涉呼叫此函式的物件實體
- get_name 和 set_name 函式都是Person物件的方法(method), 而name 變數則被稱作是屬性(attribute)
- __init__ 是此物件的建構子(constructor), 建立物件實體時一定會被呼叫
- 類別實體的資料並不會互相影響
B. 資訊隱藏
在python中並沒有直接隱藏某個屬性或是方法的辦法(像java中的 protected or private 關鍵字)
如果要做到隱藏的效果, 可以在屬性或是方法前面加上兩個底線的前置字串
ex:
class Person(object):
__name = ''
def __init__(self, name):
self.__name = name
self.__initSomething()
def get_name(self):
return self.__name
def set_name(self, name)
self.__name = name
def __initSomething(self):
print 'init something...'
只要是名稱前面加上兩個底線的屬性或方法, 就無法直接透過物件實體存取到
所以假設a是Person的物件實體, a.__name 會回傳 'Person' object has no attribute '__name'
事實上python 只是將它們換了名字 實際上只要這樣就存取得到 a._Person__name
但如此的機制可以防止不小心的存取
C. 物件繼承(inheritance)
class Employee(Person):
__role = ''
def __init__(self, name, role):
self.__name = name
self.__role = role
def get_role(self):
return self.__role
def set_role(self, role):
self.__role = role
想保持既有物件類別的一些特性, 然後再加上或是修改物件類別的屬性或是方法, 便可以透過繼承機制
以上的程式碼宣告了一個Employee物件類別, Employee物件類別內並沒有定義get_name方法, 不過類別實體還是可以呼叫之, 因為Employee物件繼承了Person類別, 所以此物件既是Employee類別, 也是Person 類別, 含有Person類別的既有方法, 寫法就如同上面的程式碼 要被繼承的類別放在小括號中
super(Employee, self) 則表示Employee 所繼承的類別, 意即 Person 類別
留言
張貼留言