天天看点

一个简单示例,带你了解python中的类方法、静态方法、实例方法和私有方法的区别

直接上干货~

from random import randint

class Game:
    '''
    类方法,不需要实例化,通过类名直接调用,使用装饰器@classmethod修饰
    @cls: 第一个参数必须是当前类本身,参数名一般约定为cls
    '''
    @classmethod
    def play1(cls):
        cls().__play()

    '''
    静态方法,通过类或者实例对象调用,使用装饰器@staticmethod修饰。
    参数随意,没有self和cls参数,方法体中不能使用类或实例的任何属性和方法;
    '''
    @staticmethod
    def play2():
        print("此处无法调用本类中的其它属性和方法")

    '''
    实例方法,必须实例化类之后才能被调用
    @self: 第一个参数必须是当前类的实例对象,参数名一般约定为self
    '''
    def play3(self):
        self.__play()

    '''
    私有方法,以两个下划线开头,只能在类的内部调用
    @self: 第一个参数必须是当前类的实例对象,参数名一般约定为self
    '''
    def __play(self):
        print("猜数字游戏!")
        rand_int = randint(0, 100)
        while True:
            user_guess = int(input("请输入您猜的数字(0-100):"))
            if user_guess == rand_int:
                print(f"您猜的数字是{user_guess},恭喜您猜中了!")
                break

            if user_guess > rand_int:
                print(f"您猜的数字是{user_guess},太大了,再接再厉!")
                continue

            if user_guess < rand_int:
                print(f"您猜的数字是{user_guess},太小了,再接再厉!")
                continue

if __name__ == "__main__":
    game = Game()
    # 调用方式一
    Game.play1()    # 类调用
    game.play1()    # 实例对象调用
    # 调用方式二
    Game.play2()    # 类调用
    game.play2()    # 实例对象调用
    # 调用方式三
    game.play3()    # 实例对象调用