2017-07-13 43 views
0

考慮一個微不足道print輔助方法的其他方法中的「自我」參照方法 - 即有意向,以減少一特定格式的輸出結構打字/雜波:快捷方式和/或避免在同一類

class MyClass(object): 

    def p(self, msg,o=None): 
    import datetime 
    omsg = ": %s" %repr(o) if o is not None else "" 
    print("[%s] %s%s\n" %(str(datetime.datetime.now()).split('.')[0], msg, omsg)) 

使其短的點/甜是來然後鍵入

self.p('Hello world') 

但是,這是唯一的選擇?

注意:我想在一個小團隊中分發這個類 - 而不是將functionp()添加到它們的名稱空間中。

+0

這個'p'方法似乎沒有理由必須是一個 - 它可能是一個函數。從這個意義上說,是的,這是可能的。 – Kendas

+1

你可以在你使用'self.point'的任何地方做'point = self.point'。但說實話,我認爲「自我」不是那麼重要。 –

+0

你應該看看這篇文章:https://stackoverflow.com/q/136097/7051394。此外,您的問題的標題有點誤導:「避免使用'self'參考」感覺您想省略'self',因爲您會以Java或大多數OOP語言省略this,這在Python中是不可能的。 –

回答

1

如果你沒有在該方法中使用self任何地方,你可以用@staticmethod裝飾它,並省略self ARG

https://docs.python.org/2/library/functions.html#staticmethod

class MyClass(object): 

    @staticmethod 
    def p(msg, o=None): 
     import datetime 
     omsg = ": %s" %repr(o) if o is not None else "" 
     print("[%s] %s%s\n" %(str(datetime.datetime.now()).split('.')[0], msg, omsg)) 

您仍然可以通過self.p(...)從其他方法中調用它該類別的實例

您也可以直接撥打電話MyClass.p(...)

+0

這正是我想要的。 Intellij仍在抱怨對「p」的引用:但會在python repl中嘗試它。 – javadba

+0

是的,這工作!謝謝!雖然'intellij'(/'pycharm')解析器會感到困惑。 – javadba