Day37-繼續複習面向對象的基礎知識(init和super)

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__()就可以自動找到相應的方法。好處是修改子類繼承的父類時,不用再修改相應的方法即可自動調用修改後的父類方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章