[英]Accessing private methods from inherited class in python
我想遵循良好的編程習慣,所以我有點被這個問題困擾:
可以說我有Class Root,
Class root(Object):
def __init__(self):
self._root_tree = 'Base'
def __str__(self):
return self._root_tree
def _test(self):
return 'test'
可以說我創建了一個名為Oak的類
Class Oak(root):
def __str__(self):
return 'Oak'
def _test(self):
return 'Oak_test'
def _new_fun(self):
return 'new_func_only_in_oak'
然后在課堂櫻桃中,我可以做以下事情嗎
Class Cherry(root):
def _grab_trees(self,another_tree): #another_tree is a Oak object
other_tree = another_tree.__str__() #this will return Oak
return 'The other three is: ' + other_tree
def _test2(self,another_tree):
return another_tree._test()
def _testing_new(self,another_tree):
return another_tree._new_fun()
基本上調用__str__()
_new_fun()
和_test()
在櫻花類有效的(好習慣)。
您可以,但是在此示例中,最好只調用str(another_tree)
。 通常,除非您要進行與它們的實現特別相關的操作(例如,從子類實現中調用超類實現),否則不應直接調用double-underscore方法。 通常,雙下划線方法的存在是為了讓類在更“正常”的上下文中以某種方式運行,並且您應出於正常目的使用該正常上下文。 例如,存在__str__
以便在類上調用str()
時讓類做正確的事情,因此應在其上調用str()
而不是直接調用__str__
。
至於單下划線方法,除非您編寫了這些方法,否則通常不建議調用這些方法。 這樣做沒有“懲罰性”,但是按照慣例,單個下划線表示不屬於公共API的方法。 因此,如果使用它們,則如果所使用的庫已更新並且那些下划線方法消失或更改,則冒着代碼中斷的風險。
這取決於您的設計聲明為這些類的方法的邏輯接口。
如果您以某種方式在某處指定要返回非實例,那么您所做的一切就很好。 如果創建隱式期望,則該方法將返回Cherry的實例,而您將返回Oak,則將為嚴重的bug引入空間。
通常,為類的內部工作和重鑄保留__method__
約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.