Python-61-物件導向-繼承

  • 物件導向複習
  • 繼承 (可以繼承父類別所有的變數和方法,但可以不繼承建構子)
  • 繼承父類別的建構子
  • 建立自己的建構子以及使用超類別(繼承父類別建構子)

物件導向複習

class myname:
        
    def __init__(self,name):
        self.name=name
    
    def printName(self):
        print("Name = "+self.name+"您好")


xxx=myname(input("請輸入名字"))
xxx.printName()
        
yyy=myname(input("請輸入名字"))
yyy.printName()

 

看看效果

繼承

  • 可以繼承父類別所有的變數和方法
  • 如子類別沒寫建構子,建構子會跟父類別一樣

 

class myname:#父類別
    
    def __init__(self, name):
        self.name = name
 
    def printName(self):
        print ("Name  = " + self.name+"您好")
 
class welcome(myname):#子類別 (可以繼承父類別所有的變數和方法)
    #如子類別沒寫建構子,建構子會跟父類別一樣
 
    def saywelcome(self):
        print ("Welcome")

obj1 = myname(input("請輸入姓名"))
obj1.printName()

obj2 = welcome(input("請輸入姓名"))
obj2.printName() #調用父類別的方法

obj2.saywelcome()#調用自己類別的方法

 

看看效果

如果子類別有寫建構子,不繼承父類別的建構子

class myname:#父類別
    
    def __init__(self, name):
        self.name = name
 
    def printName(self):
        print ("Name  = " + self.name+"您好")
 
class welcome(myname):#子類別 (可以繼承父類別所有的變數和方法,但不繼承父的建構子  )
    def __init__(self, name):
        self.name = name
 
    def saywelcome(self):
        print ("Welcome")

obj1 = myname(input("請輸入姓名"))
obj1.printName()

obj2 = welcome(input("請輸入姓名"))
obj2.printName() #調用父類別的方法

obj2.saywelcome()#調用自己類別的方法

 

看看效果

 

繼承父類別的建構子

 

#繼承建構子
class myname:#父類別
    name = ""
 
    def __init__(self, name):
        self.name = name
 
    def printName(self):
        print ("Name  = " + self.name+"您好")
 
class welcome(myname):#子類別
    def __init__(self, name):
        super().__init__(name) #超類別(繼承父類別的建構子)
       #self.name = name
 
    def saywelcome(self):
        print ("Welcome")
 
Judy = myname(input("請輸入姓名"))
Judy.printName()

Andy = welcome(input("請輸入姓名"))
Andy.printName()

Andy.saywelcome()

看看效果​

建立自己的建構子以及使用超類別(繼承父類別建構子)

#建立自己的建構子以及使用超類別(繼承父類別建構子)
class myname:#父類別
    def __init__(self, name):
        self.name = name
 
    def printName(self):
        print ("Name  = " + self.name+"您好")
 
class welcome(myname):#子類別
    def __init__(self, name,age): #建立自己的建構子
        super().__init__(name) #超類別(繼承父類別建構子)
        self.age = age #建立自己的類別變數
 
    def saywelcome(self):
        print (self.name,"Welcome",self.age,"歲")
 
Judy = myname(input("請輸入姓名"))
Judy.printName()

Andy = welcome(input("請輸入姓名"),input("請輸入年紀"))
Andy.printName()

Andy.saywelcome()

 

看看效果

 

class myname:#父類別
   def __init__(self,name):
       self.name=name
   
   def printname(self):
       print("哈囉"+self.name+",你好嗎?")
class welcome(myname): #子類別(繼承父類別所有變數跟方法)
   #如果沒有建構子,則繼承父類別的建構子
   #如果有寫建構子,則會使用子類別自己的
   def saywelcome(self):
       print("Welcome "+self.name+" ,how are you")
     
class welcome2(myname): #子類別(繼承父類別所有變數跟方法)
   #如果沒有建構子,則繼承父類別的建構子
   def __init__(self, name,age): #建立自己的建構子
       super().__init__(name) #超類別(繼承父類別建構子)
       self.age = age #建立自己的類別變數
   #如果有寫建構子,則會使用子類別自己的
   def saywelcome(self):
       print("Welcome "+self.name+" ,how are you"+self.age)
obj_1=myname(input("請輸入姓名: "))
obj_1.printname()
obj_2=welcome(input("請輸入第二個姓名: "))#使用子類別
obj_2.printname()#使用父類別的方法
obj_2.saywelcome()#使用子類別的方法
obj_3=welcome2(input("請輸入第三個姓名: "),input("請輸入年紀"))
obj_3.saywelcome()

 

Yiru@Studio - 關於我 - 意如