Ⅰ python自定義的類,為什麼需要重寫
首先,自定義的類在不繼承任何基類的情況下,也具有__str__屬性:
[python] view plain
class RoundFloatManual(object):
... def __init__(self, val):
... assert isinstance(val, float), \
... "Value must be a float!"
... self.value = round(val, 2)
rfm = RoundFloatManual(5.590464)
dir(rfm)
返回:
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__mole__', '__new__', '__rece__', '__rece_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value']
__str__ 是 Python 類中的特殊方法,他的回傳值就是使用 str(x) 所得到的值, 而 print(x) 其實就等於是print(str(x)).其實再講細一點,當我們呼叫 str(x) 的時候其實是呼叫x.__str__()
也就是說我們可以這樣想像:
print(x) === print(str(x)) === print(x.__str__())
一般我們 自定義的類,__str__ 方法的回傳值是默認的字串,比如說: <__main__.Mylist object at 0x0071A470> 用以說明 namespace, class name 和位置.如果要改變__str__ 的回傳值,我們必須要覆寫他.
Ⅱ python 重載和重寫的區別
重載和重寫,這是兩個新概念,是兩個令我們容易混淆的概念。方法重載(overloading method)
是在一個類裡面,方法名字相同,而參數不同。返回類型呢?可以相同也可以不同。方法重寫(overiding method)
子類不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。方法重載是讓類以統一的方式處理不同類型數據的
一種手段。Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同個數和
類型的參數來決定具體使用哪個方法,
這就是多態性。方法重寫:在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定
的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類重寫方法的規則:
參數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.
返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載.訪問修飾符的限制一定要大於被重寫方法的訪問修飾符
(public>protected>default>private)重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬
泛的檢查型異常.例如,父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出
IOException的子類異常,可以拋出非檢查異常.重載的規則:必須具有不同的參數列表;可以有不同的返回類型,只要參數列表不同就可以
了;可以有不同的訪問修飾符;可以拋出不同的異常;注意,Java的方法重載要求同名的方法必須有不同的參數表,僅有返回類型不同是不足以區分兩
個重載的方法。重寫方法只能存在於具有繼承關系中,重寫方法只能重寫父類非私有的方法。下面分別舉一個例子來說明方法重載:public class
TestOverLoad{ public static void main(String[] args) {Test test = new
Test(); test.print(null); } }class Test{ public void print(String
some){System.out.println("String version print"); } public void
print(Object some){ System.out.println("Object version print");
}}該程序輸出的結果是String version print。
Ⅲ python3 threading模塊如何關閉或者退出子線程
Thread 是threading模塊中最重要的類之一,可以使用它來創建線程。有兩種方式來創建線程:一種是通過繼承Thread類,重寫它的run方法;
另一種是創建一個threading.Thread對象,在它的初始化函數(__init__)中將可調用對象作為參數傳入。下面分別舉例說明。
Ⅳ Python 如何實現關閉當前子窗口
函數root2_x()改成:
def root2_x():
root2.destroy()
Ⅳ 在python tkinter中用什麼函數可以關掉一個窗口
好象調用一次主窗口的close似乎就可以。或者是app的close, 或者是destroy或者是terminate,不記得是哪個函數了。
當然你殺掉自己也是可以的。 用kill。 或者是sys.exit也應該可以。
Ⅵ python類方法重寫
從父類繼承中的方法,如果不滿足程序的需求,就需要重寫。
方法重寫指的是在子類中自定義實現父類中的同名方法。
Ⅶ 在Python中為什麼重寫__new__方法時,不需要聲明它是靜態方法
這個不需要糾結,就和你寫的 "if" 解釋器如何判斷它是關鍵字?一個意思。
這個是解釋器自己的邏輯,同樣__init__()方法和其他方法也定義也沒有區別,為什麼實例化先會調用它,也是一個意思。
通俗點講,你帶了幾個朋友回家,你要給家裡人介紹一下,其中有一個朋友是你們家親戚,那是不是就可以不用介紹了?