python的隱式繼承

2021-09-10 03:51:06 字數 1270 閱讀 3092

#!/usr/bin/env python 

# -*- coding:utf-8 -*-

class modle:

__name = "dnn"

def __init__(self, name):

self.__name = name

def print_name(self):

print(self.__name)

@classmethod #類方法不管後面被繼承了多少次,它始終繫結在類modle上

def print_cls_name(cls):

print(cls.__name)

class cnnmodle(modle): # 繼承

__name = "cnn"

def __init__(self,name):

self.__name = name

class cnnmodlebp(cnnmodle):

__name = "cnnmodlebp"

def main():

cnnmodle = cnnmodle("lenet") # __init__(self, name),self指代cnnmodle,name是lenet

cnnmodle.print_name()

cnnmodle.print_cls_name() # 這裡的name是modle的name 而不是cnnmodle的name

# 否則print的結果應該是cnn,實際列印的是dnn

注釋前輸出:

注釋後輸出:

原因:1、如果子類中沒有定義自己的__init__()函式,則隱式呼叫父類的

2、子類可以使用父類中定義的所有屬性和方法,但類方法的行為需要注意

使用了@classmethod後的方法雖然可以繼承,但是方法裡面的cls引數繫結了父類,即使在子類中呼叫了類方法,但通過cls引用的屬性依舊式父類的類屬性 

Scala的隱式引數 隱式值 隱式物件

trait calc t 使用隱式值轉換到隱式引數 class multiplywithint extends calc int class multiplywithstring extends calc string 定義隱式值 implicit val i new multiplywithint...

python 隱式行連線

tip 每行不超過80個字元 例外 長的匯入模組語句 注釋裡的url 不要使用反斜槓連線行.python會將 圓括號,中括號和花括號中的行隱式的連線起來 你可以利用這個特點.如果需要,你可以在表示式外圍增加一對額外的圓括號.yes foo bar self,width,height,color bl...

隱式轉換中隱式引數與隱式函式的使用

隱式引數的使用 要定義多個隱式引數時,需要使用柯里化函式。隱式轉換作用就是 當呼叫方法時,不必手動傳入方法中的隱式引數,scala會自動在作用域範圍內尋找隱式值自動傳入。1 同型別的引數的隱式值只能在作用域內出現一次,同乙個作用域內不能定義多個型別一樣的隱式值。2 implicit 關鍵字必須放在隱...