1. 面向對象編程的基礎知識init:
class Rectangel(object): #創建一個矩形的類
def __init__(self, x, y):
self._x = x
self._y = y # 屬性:長和寬
def get_perimeter(self):
return (self._x + self._y) * 2 # 方法:可以求周長
def get_area(self):
return self._x * self._y # 方法:可以求面積
def main():
rect1 = Rectangel(3, 4)
rect2 = Rectangel(18, 209)
print('rect1的周長爲:%s' % rect1.get_perimeter())
print('rect2的周長爲:%s' % rect2.get_perimeter())
print('rect1的面積爲: %s' % rect1.get_area())
print('rect2的面積爲:%s' % rect2.get_area())
# 將類實例化
if __name__ == '__main__':
main()
2. 面向對象中的super方法:
import random
class Fish:
def __init__(self):
self._x = random.randint(0, 10)
self._y = random.randint(0, 10) # 屬性:座標
def move(self):
self._x -= 1
print('我的位置是:', self._x, self._y) # 方法
class Goldfish(Fish):
pass
class Shark(Fish):
def __init__(self):
#Fish.__init__(self)
super().__init__() # 自動找到相關父類的方法
self._hungry = True
def eat(self):
if self._hungry:
print('吃啊吃啊吃!')
self._hungry = False
else:
print('飽了,吃不下!')
def main():
glodfish = Goldfish()
glodfish.move()
shark = Shark()
shark.eat()
shark.eat()
shark.move()
if __name__ == '__main__':
main()
父類是Fish,子類是金槍魚和鯊魚;金槍魚什麼都不寫就可以繼承父類的move方法;而鯊魚重寫了init,所以覆蓋掉了父類的init,必須調用一次。而普通調用是註釋內的代碼,如果用超級方法:super().__init__()就可以自動找到相應的方法。好處是修改子類繼承的父類時,不用再修改相應的方法即可自動調用修改後的父類方法。