关于python面向对象中的self的用法


我在学习状态模式的时候

class state:
    def program(self, h):
        pass


class morning(state):
    def program(self, h):
        if h.hour < 12:
            print("精力充沛")
        else:
            h.setstate(noon())
            h.program()


class noon(state):
    def program(self, h):
        if h.hour < 13:
            print("午休")
        else:
            h.setstate(afternoon())
            h.program()

class afternoon(state):
    def program(self, h):
        if h.hour < 18:
            print("下午还行")
        else:
            h.setstate(evening())
            h.program()
class evening(state):
    def program(self, h):
        if h.finish:
            h.setstate(go_home())
            h.program()
        elif h.hour < 21:
            print("加班")
        else:
            h.setstate(sleep())
            h.pregram()

class go_home(state):
    def program(self, h):
        print("下班回家")

class sleep(state):
    def program(self, h):
        print("睡觉")


class work:
    state = morning()
    finish = False
    hour = 8

    def setstate(self, state):
        self.state = state
    def program(self):
        self.state.program(self)

if __name__ == "__main__":
    a = work()
    a.hour = 18
    a.finish = True
    a.program()

发现work类的program函数里的self.state.program的括号里必须要有self,没有的话就报错,这个self是什么意思,实在搞不懂,希望各位可以给解答一下,感谢

因为这个方法里面要传参数,方法需要传递参数的时候不传递参数就会报错

目录* 1、self的作用

2、self的使用注意事项
(1)self代表类的实例,而非类
(2)self不必非写成self,只是一种规范。
(3)类中方法的形参中一定要写self,包括内置函数
(4)__init__函数中,要把接收到的参数赋值到self中,提供全类使用
(5)同一个类中调用其他的方法时需要加self
(6)self总是指调用时的类的实例,在继承时中也一样
(7)self与私有变量的用法
(8)总结

————————————————
版权声明:本文为CSDN博主「洛蕾」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_45562973/article/details/123065042