pythonベースインスタンスメソッド、クラスメソッド、静的メソッド


1インスタンスメソッド/オブジェクトメソッド
インスタンスメソッドまたはオブジェクトメソッドとは、クラスで定義された一般的なメソッドを指します.
オブジェクトをインスタンス化してからしか使用できない方法で、この方法の最初のパラメータはオブジェクト自体に違いありません.
class Person():
    def hello(self):   #self        
        print('hello world')
        

2静的アプローチ
(1)形式:メソッドに@staticmethodを追加
(2)パラメータ:静的メソッドにはパラメータがあってもなくてもよい
(3)シーンの適用:クラスオブジェクトおよびインスタンスオブジェクトに関係なく一般的に使用されるコード
(4)使用方法:クラス名.クラスメソッド名(またはオブジェクト名.クラスメソッド名)
class Game():

    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    #          
    #def test1(self):
    #    self.name
    #    self.age

    @staticmethod
    def mune():
        print('    【1】')
        print('    【2】')
        print('    【3】')
Game.mune()  #      
#      
game = Game('    ',10)
game.mune()
"""
    [1]
    [2]
    [3]

    [1]
    [2]
    [3]
"""


3種類の方法
インスタンス化する必要はなく,直接呼び出す方法でよいが,方法の最初のパラメータはクラス自体を受け入れるに違いない.
(1)メソッドに@classmethodを追加
(2)メソッドのパラメータはclsであっても他の名前であってもよいが,一般的にはclsがデフォルトである.
(3)cls指向クラスオブジェクト(つまりGoods)
(4)シーンの適用:1つのメソッドで静的属性のみが適用される場合、クラスメソッド(クラスメソッドで属性を変更)を使用できます.
(5)オブジェクト名であるもよい.類方法名.あるいはクラス名です.類方法名
class Dog:
    role = ' '

    def test(self):
        #       
        pass

    @classmethod
    def test2(cls):
        """cls             """
        print(cls.role)
        print(Dog.role)   #         

#Dog           
print(Dog.role)
#    
Dog.test2()
#         
dog = Dog()
dog.test2()

どの商品でも割引できます
"""       """              
class Goods:
    
    def __init__(self,name,price): 
        self.name = name
        self.__price = price
        self.__discount = discount  #          
    
    @property    
    def price(self):
        return self.__price * __discount = self.__price

    def change_discount(self,new_discount)   #    
        __discount = new_discount

apple = Goods('  ',10)  #          10
apple.change_discount(0.8) #    
print(apple,price)

banana = Goods('  ',20)
banana.change_discount(0.7)
print(banana,price)
"""  classmetho  """
class Goods:
    __discount = discount  #            

    def __init__(self,name,price): 
        self.name = name
        self.__price = price
            
    @property    
    def price(self):
        return self.__price * __discount = self.__price
    
    @classmethod
    def change_discount(self,new_discount)   #    
        __discount = new_discount


Good.change__discount(0.8)
apple = Goods('  ',10)  #          10
print(apple,price)

banana = Goods('  ',20)
print(banana,20)