Python子類呼叫父類方法或子類定義的方法輸出會多出個None

2022-02-04 20:07:06 字數 3993 閱讀 6455

1樓:禱裯

我覺得最佳的回答的是不對的, 在python中若是函式沒有定義return的結果,則會預設返回一個none

def func():

a = 1

b = 2

a = func()

print(a)

>>> none

在官方文件中也有說明的, 而你列印出none的原因就是因為你在類的方法

中直接列印了字串沒有返回值, 將方法中的pring改成return即可

2樓:

這是類的繼承問題。先說一下,對於python來說定義函式要用def來定義,沒有這個關鍵字無法定義函式。

然後通常,如果父類中有呼叫self.a,那麼這個就是類的屬性,也就是說,子類中自然存在。直接在子類中直接呼叫即可,如果在父類中只定義了一個區域性變數,那麼子類是獲取不到的。

不過可以定義類方法,直接呼叫類方法獲取你想要的值。

方法1.

class a: def get_a(self): self.

a=1 print(self.a)class b(a): def get_b(self):

#self不是python關鍵字,建議類方法用self作為第一個引數 self.get_a()if __name__ == '__main__':b = b()b.

get_b()

3樓:幻夜震天

使用print(my.describe_restaurant())會多輸出一個none,是因為在def my.describe_restaurant(self):

函式中,用了print,

def my.describe_restaurant(self):

print('the cuisine type of'+self.restaurant_name + 'is' + self.cuisine_type)

所以print(my.describe_restaurant())==print(print('the cuisine type of'+self.restaurant_name + 'is' + self.

cuisine_type)),

所以輸出多一個none,可以改成如下兩種方法都行

1.print(my.describe_restaurant())改成直接呼叫my.describe_restaurant()

2.def my.describe_restaurant(self):

return 'the cuisine type of'+self.restaurant_name + 'is' + self.cuisine_type

print改成return

python中子類怎樣呼叫父類方法

4樓:育知同創教育

子類呼叫

父類函式有以下方法:

直接寫類名呼叫

用 super(type, obj).method(arg)方法調專用。

在類定屬義中呼叫本類的父類方法,可以直接用super().method(arg)

class a:

def method(self, arg):

pass

class b(a):

def method(self, arg):

# a.method(self,arg) # 1

# super(b, self).method(arg) # 2

super().method(arg) # 3

python 子類呼叫父類中的方法的一個int值

python中子類怎樣呼叫父類方法

5樓:啊恨

子類呼叫父類函式有以下方法:

直接寫類名呼叫

用 super(type, obj).method(arg)方法呼叫。

在類定義中呼叫本類的父類方法,可以直接用super().method(arg)

class a:

def method(self, arg):

pass

class b(a):

def method(self, arg):

#        a.method(self,arg)                # 1

#        super(b, self).method(arg)        # 2

super().method(arg)               # 3

python中子類如何呼叫父類的方法

python子類如何才能呼叫父類的方法

6樓:qq小白

.直接寫類名呼叫

2.用 super(type, obj).method(arg)方法呼叫。

3.在類定義中呼叫本類的父類方法,可以直接 super().method(arg).

在**中呼叫物件的父類的方法的示例:

ob = b()super(b,ob).method(arg) #呼叫class b的父類class a的method。

初始化中呼叫父類初始化方法示例:class b(a):def __init__(self):super().__init__()

python 子類怎麼呼叫父類方法

7樓:匿名使用者

兩種方法解決:

- 第一種

class a:

def __init__(self):

self.namea="aaa"

def funca(self):

print "function a : %s"%self.nameaclass b(a):

def __init__(self):

#這一行解決了問題

a.__init__(self)

self.nameb="bbb"

def funcb(self):

print "function b : %s"%self.namebb=b()

print b.nameb

b.funcb()

b.funca()12

3456

78910

1112

1314

1516

第二種:

#父類需要繼承object物件

class a(object):

def __init__(self):

self.namea="aaa"

def funca(self):

print "function a : %s"%self.nameaclass b(a):

def __init__(self):

#這一行解決問題

super(b,self).__init__()self.nameb="bbb"

def funcb(self):

print "function b : %s"%self.namebb=b()

print b.nameb

b.funcb()

b.funca()12

3456

78910

1112

1314

1516

17ps:讓類a繼承自object類,這樣才能使用super函式,因為這是python的「新式類」支援的特性。當前的class和物件可以作為super函式的引數使用,呼叫函式返回的物件的任何方法都是呼叫超類的方法,而不是當前類的方法。

優劣:- 方法一更直觀,方法二可以一次初始化所有超類- super函式比在超類中直接呼叫未繫結方法更直觀,但是其最大的優點是如果子類繼承了多個父類,它只需要使用一次super函式就可以。然而如果沒有這個需求,直接使用a.

init(self)更直觀一些。

子類重寫父類的方法,父類沒有異常,子類可以拋異常嗎

這就是java的重寫規則。對於異常重寫方法不能丟擲新的異常或者比被重寫方法宣告的檢查異常更廣的檢查異常。但是可以丟擲更少,更有限或者不丟擲異常。重寫規則之一 重寫方法不能比被重寫方法限制有更嚴格的訪問級別。但是可以更廣泛,比如父類方法是包訪問許可權,子類的重寫方法是public訪問許可權。比如 ob...

C父類中有純虛擬函式,在子類的子類中也需要實現嗎

1 在main函式中,假設有父類或者子類的例項物件,就須要有父類的虛擬函式的實內現。2 在容main函式中,假設沒有父類或者子類的例項物件,能夠不實現父類的虛擬函式。3 假設把虛擬函式寫成純虛擬函式,也就不須要實現了。也沒不會發生上述討論。子類中實現了,子子類就不用實現。子類沒實現的話,子子類就可能...

php寫函式 根據子類 id 遞迴查詢頂級父類 id返回

使用tp5寫的函式,求出父親id,最後再將第一個傳入的父類id和函式的返回值拼接起來,然後通過查資料庫求出名字,當然自己簡化一下也可以一步求出父類的名字 public function getchild pid return ids 你肯定得是兩張表吧 一張是 table1 id name pid ...