54506


classについて勉強中です。  
classの変数についているselfは取ったらまずいですか？読みづらかったり、バグの原因につながりますか？

[code]

    class aisatu():
        def __init__(self,asa):
            self.asa = asa
        def say(self):
            print self.asa
    
[/code]

上のコードを書けば間違いないと思うのですが、

[code]

    class aisatu():
        def __init__(self,asa):
            self.asa = asa
        def say(self):
            asa = self.asa？？？
            print asa
    
[/code]

こんな感じで、selfを何回も書いていくのが面倒だと思ったのでのでとりました。？？？の所です。（printの後にもasaは出てくる予定です）


CC BY-SA 4.0
2019-04-26T10:49:56.417
54501
2019-04-26T17:34:11.247
2019-04-26T17:14:22.833
34087
34087
question
python
classの変数についているselfについて


問題ありません。

質問において表現されていた「 `self`
を取る」というのは、適切な用語で言い換えると「メソッドの中で、インスタンス変数を通常の変数に代入する」という操作に該当します。今回の例では、 `asa`
という変数をこの後も使いたいとのことですので、変数に代入して問題ありません。

ただし、インスタンス変数の値を上書きたい場合に注意が必要です。以下の例をご覧ください。

[code]

    class Human:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def incorrect_increase_age(self):
            age = self.age
            age = age + 1    # self.ageが変わっていない
    
        def correct_increase_age(self):
            self.age = self.age + 1
    
        def show_age(self):
            print("{} is {} years old".format(self.name, self.age))
    
    
    def main():
        tom = Human(name="Tom", age=20)
        tom.show_age()    # Tom is 20 years old
    
        tom.incorrect_increase_age()
        tom.show_age()    # Tom is 20 years old
    
        tom.correct_increase_age()
        tom.show_age()    # Tom is 21 years old
    
    
    if __name__ == "__main__":
        main()
    
[/code]

この例で、正しい代入の例（ `correct_increase_age`
）はインスタンス変数に新しい値を代入することでインスタンス変数の値を変更していますが、間違った代入の例（ `incorrect_increase_age`
）では、インスタンス変数ではない変数に代入し、結果値が変更元の値のままになっています。このように、値を変更する場合のみ気を付けてください。


CC BY-SA 4.0
2019-04-26T17:34:11.247
54506
2019-04-26T17:34:11.247
29826
54501
answer