在子派生的新方法中重用父類功能的兩種方式

2022-09-17 07:48:13 字數 2018 閱讀 5733

方式一: 與繼承無關

指名道姓法,直接用:類名.函式名

例如:

# 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方法中的執行...