方式一: 與繼承無關
指名道姓法,直接用:類名.函式名
例如:
# class oldboypeople:方式二:嚴格以繼承屬性查詢關係# school = 'oldboy'
## def __init__(self, name, age, ***):
# self.name = name
# self.age = age
# self.*** = ***
## class oldboystudent(oldboypeople):
# def __init__(self,name,age,***,stu_id): #定製自己獨有的屬性
# oldboypeople.__init__(self,name,age,***) #重用父類的功能
# self.stu_id=stu_id
## def choose_course(self):
# print('%s is choosing course' %self.name)
注意:super()會得到乙個特殊的物件,該物件就是專門用來訪問父類中的屬性的(按照繼承的關係)
super().__init__(不用為self傳值)
注意:super()的完整用法是super(自己的類名,self),再python2中需要些完整,而python3中可以簡寫為super()
例如:
# class oldboypeople:# school = 'oldboy'
## def __init__(self, name, age, ***):
# self.name = name
# self.age = age
# self.*** = ***
## class oldboystudent(oldboypeople):
# def __init__(self,name,age,***,stu_id): #定製自己獨有的屬性
# # oldboypeople.__init__(self,name,age,***)
# super(oldboystudent,self).__init__(name,age,***) #重用父類的功能,從呼叫super的物件的類的父類找init
# self.stu_id=stu_id
## def choose_course(self):
# print('%s is choosing course' %self.name)##
# stu1=oldboystudent('豬哥',19,'male',1)
# print(stu1.__dict__)
## print(oldboystudent.mro())
按繼承關係查詢屬性,當有super()的時候:
例如:
class a:def f1(self):
print('a.f1')
class b:
def f2(self):
super().f1()
print('b.f2')
class c(b,a):
pass
obj=c()
print(c.mro()) #c-》b->a->object
obj.f2()
# 先從物件obj裡找f2,物件裡沒有,去類c裡找,類c裡沒有,去父類b裡去找,b中有super(),
# super()會得到乙個特殊的物件,該物件就是專門用來訪問父類中的屬性的(按照繼承的關係),,找父類的話,
# 是按誰觸發了super(),就去找誰的父類,再這裡是c呼叫了f2,觸發了super,所以應該找
# c類的父類a。所以,先列印了a,後再執行下面的**
在子類中重用父類的屬性
在子類派生出的新的方法中重用父類的方法,有兩種實現方式 一 指名道姓 不依賴繼承 class hero def init self,nickname,life value,aggresivity self.nickname nickname self.life value life value se...
在子父類中,成員的特點體現
在子父類中,成員的特點體現.1.成員變數 當本類的成員和區域性變數同名用this區分.當子父類彙總的成員變數同名用super區分父類.this和super的用法很相似 this 代表乙個本類物件的引用.super 代表乙個父類的空間.2.成員函式 當子父類中出現成員函式一模一樣的情況,會執行子類的函...
java 父類子類方法在子程序的呼叫順序
答案是看發起的類。當main函式中定義的是父類的時候,父類直接調起父類自己的methodfather方法,此方法直接呼叫父類的方法。如結果1顯示 當main函式中定義的是子類的時候,雖然子類中沒有methodfather方法。那就應該是直接呼叫父類的這個方法。但是methodfather方法中的執行...