類別
class Demo:i=0 # 類別變數
def __init__(self, name):
self.name=name # self.name 實體變數
def showvalue(self):
print("hello",self.i)
def showname(self):
print("hello",self.name)
private variable 或 private_method 在名稱前面加上 __
__variable
__function
Private value
Traceback (most recent call last): File "C:/Python34/aaa.py", line 33, in <module> print(a.__y) # private attribute AttributeError: 'Demo' object has no attribute '__y'
200 Traceback (most recent call last): File "C:/Python34/aaa.py", line 25, in <module> print(a.i) AttributeError: 'Demo' object has no attribute 'i'
Traceback (most recent call last): File "C:/Python34/aaa.py", line 25, in <module> print(a.__i) AttributeError: 'Demo' object has no attribute '__i'
==========================================
封裝
public data, private datapublic function, private function
==========================================
類別多重繼承
子類別(subclass)能夠繼承(inherit) 多個父類別,使子類別可以有多種特性。
- 當子類別繼承(inheritance)超過一個來源的時候,會以寫在最左邊的父類別優先繼承,這是說,多個父類別如果有相同名稱的屬性(attribute)與方法(method),例如init()、str__()等,就會以最左邊的父類別優先。
==========================================
多型(polymorphism) 與抽象方法( Abstract method)
class Animal: def __init__(self, name): # Constructor of the class self.name = name def talk(self): # Abstract method, defined by convention only raise NotImplementedError("Subclass must implement abstract method") class Cat(Animal): def talk(self): return 'Meow!' class Dog(Animal): def talk(self): return 'Woof! Woof!' class Fish(Animal): pass animals = [Cat('Missy'), Cat('Garfield'), Dog('Lassie'),Fish('Gold')] for animal in animals: print(animal.name + ': ' + animal.talk())
Traceback (most recent call last): File "D:\Python_lecturer_NTU\python code\python code\EX05_08.py", line 20, in <module> print(animal.name + ': ' + animal.talk()) File "D:\Python_lecturer_NTU\python code\python code\EX05_08.py", line 5, in talk raise NotImplementedError("Subclass must implement abstract method") NotImplementedError: Subclass must implement abstract method
沒有留言 :
張貼留言