2014-11-24 56 views
-1

我有兩個文件,main.pyColorPoint.py。最後一個由Point類和ColorPoint類組成,繼承自Point類。有沒有辦法從main.py文件中訪問Point的方法?在Python中訪問父級方法

例如我有兩種方法__str__PointColorPoint類。但我想打印colorpoint對象只是Point

print colorpoint # gives output from Point class, not ColorPoint class 

我知道如何從類通過super訪問父方法,但如何從main這樣做,不來上課?

+5

這是一個不尋常的請求 - 您能不能給一些更多的信息n對你想要達到的目標,也許有更好的方法去嘗試...... – 2014-11-24 13:54:59

+0

'Point .__ str __(colorpoint)'? – Rusty 2014-11-24 13:55:21

+0

生鏽,是的 - 正是我想要的! – ovod 2014-11-24 13:57:34

回答

1

您正在查找the thingy formerly known as unbound methods

在python中,當你通過類調用一個方法時,「self」不會自動綁定(應該怎麼知道在哪個實例上運行?),你必須自己傳遞它。而這個「自我」並不一定是這個班的實際例子。

所以,你可以這樣做:

>>> class A(object): 
... def __repr__(self): 
...  return "I'm A's __repr__ operating on a " + self.__class__.__name__ 
... 
>>> class B(A): 
... def __repr__(self): 
...  return "I'm B's __repr__" 
... 
>>> b=B() 
>>> b 
I'm B's __repr__ 
>>> A.__repr__(b) 
"I'm A's __repr__ operating on a B" 

而且能充分滿足您的規格,你也可以找出父類在運行時編程調用哪些方法,例如像這樣(不是一個安全的實現,僅用於教育目的,將打破更多複雜的設置,請不要使用sometig這樣的生產,這是可怕的代碼,disclaimerdisclaimerdisclaimer)

>>> b.__class__.__base__.__repr__(b) 
"I'm A's __repr__ operating on a B"