亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果我使用與超類相同的名稱,我是否會在子類方法中覆蓋我的超類定義?

如果我使用與超類相同的名稱,我是否會在子類方法中覆蓋我的超類定義?

慕斯王 2022-06-28 15:34:27
這是上一個問題的后續,我在這個問題上把事情復雜化了。OOP 中的依賴關系可以通過繼承或組合來強制執行。在這個例子中,我嘗試使用繼承。我想用 OOP 對以下簡單的方程組進行建模:T = c_v*t/(a*h)**2U = (T**3/(T**3+0.5))使用__init__and__call__方法,并且感謝這個鏈接,它展示了一種使用面向對象結構建模數學函數的優雅方式,我能夠做到以下幾點:class T:    def __init__(self, c_v, a, h):        self.c_v = c_v        self.a = a        self.h = h    def __call__(self, t):        return self.c_v*t/(self.a*self.h)**2class U(T):    def __call__(self, t):        T = super().__call__(t)        return (T**3/(T**3+0.5) )**(1/6)然后是以下內容:>>> U_func = U(1.5E-7, 0.5, 12)>>> U_func(100*24*60*60)輸出正確的結果。然而,第 12 行T = super().__call__(t)有點困擾我。我在那里覆蓋類定義T嗎?我真的不想那樣做。另外,我不想在那里為T變量(而不是類)編一個新名稱。是否T僅限于實例方法范圍,還是我實際上覆蓋了類的定義T?
查看完整描述

2 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

有兩個不同的變量名為T

  1. 一個類綁定到T當前模塊全局范圍內的名稱。

  2. 該類的實例綁定到T函數本地范圍內的名稱U.__call__。

它們是完全獨立的,除了在內部__call__,您必須通過限定名稱來引用該類,例如__name__.T,因為局部變量T會隱藏全局變量。


查看完整回答
反對 回復 2022-06-28
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

我在那里覆蓋類定義T嗎?

不。在函數中分配的變量對外部隱藏,在它們自己的私有“范圍”中。您在這里所做的稱為遮蔽全局變量,不推薦但不會覆蓋它。相反,您應該只使用不同的名稱。如果您執行以下操作,該函數只會在全局范圍內分配變量:

def foo():
    global bar
    bar = 'new value'


查看完整回答
反對 回復 2022-06-28
  • 2 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號