#!/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 關鍵字必須放在隱...