1. 程式人生 > 程式設計 >pycharm實現在子類中新增一個父類沒有的屬性

pycharm實現在子類中新增一個父類沒有的屬性

我就廢話不多說了,還是直接看程式碼吧!

class Car():
  """一次模擬汽車的簡單嘗試"""
  def __init__(self,make,model,year):
    """初始化描述汽車的屬性"""
    self.make = make
    self.model = model
    self.year = year
    self.odometer_reading = 0

  def get_description_name(self):
    """返回整潔的描述性資訊"""
    long_name = str(self.year) + ' ' + self.make + ' ' + self.model
    return long_name.title()

  def read_odometer(self):
    """列印一條指出汽車裡程的訊息"""
    print("This car has " + str(self.odometer_reading) + " miles on it.")

  def update_odometer(self,mileage):
    """
    將里程讀數設定為指定的值
    禁止將里程錶讀數往回調
    """
    if mileage >= self.odometer_reading:
      self.odometer_reading = mileage
    else:
      print("You can't roll back an odometer!")

  def increment_odometer(self,miles):
    """將里程錶讀數增加指定的量"""
    self.odometer_reading += miles


class ElectricCar(Car):
  """電動汽車的獨特之處"""
  def _init_(self,year):
    """
    電動汽車的獨特之處
    初始化父類的屬性,再初始化電動汽車特有的屬性
    """
    super().__init__(make,year)
    self.battery_size = 70

  def describe_battery(self):
    """列印一條描述電瓶容量的訊息"""
    print("This car has a " + str(self.battery_size) + "-kwh battery.")

my_tesla = ElectricCar('tesla','model s',2016)
print(my_tesla.get_description_name())
my_tesla.describe_battery()

執行結果:

Traceback (most recent call last):
 File "E:/Python程式設計從入門到精通配套資料/Self-taught Python/electric_car.py",line 50,in <module>
  my_tesla.describe_battery()
 File "E:/Python程式設計從入門到精通配套資料/Self-taught Python/electric_car.py",line 46,in describe_battery
  print("This car has a " + str(self.battery_size) + "-kwh battery.")
AttributeError: 'ElectricCar' object has no attribute 'battery_size'

補充知識:python中類的繼承,子類的方法的新增,子類的方法的覆蓋,子類的屬性的新增,及繼續父類的屬性

python如果我們想要繼承一個類的方法,並且不改當前類,我們可以新建一個子類,來繼續他的方法

1、類的繼承,我們先來建立一個Animal的父類,我們再來建立一個dog的子類,dog子類繼承父類Animal的方法,但是裡面沒有執行任何程式碼,這時我們初始化一下dog子類為dog_1,記得也要傳入身高還有體重,不然會報錯我們可以發現dog_1繼承了Animal裡面的屬性及方法。直接輸出一下及呼叫一下。

class Animal():
  def __init__(self,weight,high):
    self.weight = weight
    self.high = high
  def shout(self):
    print('wow')
class Dog(Animal):
  pass
dog_1 = Dog(20,40)
print(dog_1.high)
print(dog_1.weight)
dog_1.shout()
#輸出內容是
40
20
wow

2、子類的方法的新增,我們同樣可以在dog這個子類裡新增新的方法,比如我們新增一個run的方法,再初始化一下dog_1,你會發現dog_1也會有run這個方法。

class Dog(Animal):
  def run(self):
    print('running')
dog_1 = Dog(20,40)
dog_1.run()
#輸出結果是
running

3、子類的方法的覆蓋,我們再新增一個子類Cat,同樣繼承Animal,但是你發現Cat不是wow這樣叫的,所以我們要重新定義一下shout函式,把父類Animal裡的函式覆蓋掉。這時我們初始化cat_1呼叫Cat子類,記得要傳入體重和身高,不然會報錯,然後呼叫shout方法,你會發現輸出的內容是miao,因為子類裡的函式把父類裡的函式覆蓋掉了。

class Cat(Animal):
  def shout(self):
    print('miao')
cat_1 = Cat(20,40)
cat_1.shout()
#輸出結果是
miao

4、子類的屬性的新增,及繼續父類的屬性,如果這時我們要給Cat加一個屬性color,同樣用__init__來定義屬性,但是我們要用super()來繼承父類裡的weight和high,color 屬性的性,同樣用self.color賦值,這樣我們用cat_2初始化Cat類的時候就要傳入三個引數,我們輸出一個cat_2.color,可以看到是正常呼叫的。

class Cat(Animal):
  def __init__(self,high,color):
    super().__init__(weight,high)
    self.color = color
  def shout(self):
    print('miao')
cat_2 = Cat(20,40,'yellow')
print(cat_2.color)
#輸出結果是
yellow

類的繼承就講到這裡,大家有問題歡迎私聊我

以上這篇pycharm實現在子類中新增一個父類沒有的屬性就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。