类里面传东西这个知识点忘了

类里面传东西这个知识点忘了

class RabbitThread(threading.Thread):
    def run(self):
        run_method(5,10)
rabbit_thread = RabbitThread(name="兔子")

写类的时候里面没有name这个形参,为什么实例化的时候能在类的括号里面传name=‘  ’

能详细说说类的知识点吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
慕运维8253108 提问者 2025-03-16 10:59:30

https://img1.sycdn.imooc.com/climg/b3104b6709d63e2b05880747.jpg这个两段上面是对的,下面把name形参写下来反而错了,这是什么原理,忘记了,类基础知识没有掌握好

  • 同学,你好!1、代码

    class RabbitThread(threading.Thread):
        def run(self):
            run_method(5,10)
    rabbit_thread = RabbitThread(name="兔子")

    在类RabbitThread中虽然没有定义name 属性,但是该类继承了threading.Thread类,python会自动调用父类的 __init__ 方法来进行实例的初始化,所以当实例化 RabbitThread 类时,rabbit_thread = RabbitThread(name="兔子"),实际上是将 name 参数传递给了父类 threading.Thread 的 __init__ 方法,父类的 __init__ 方法会处理这个参数,并将其用于设置线程的名称等相关操作。

    同学可以按ctrl键同时点击thread.Thread的Thread进入到该类中,可以查看到父类中__init__方法是有name属性的

    https://img1.sycdn.imooc.com/climg/c7c8d56709d79f6709960469.jpg

    2、在run 方法中传入name 参数报错https://img1.sycdn.imooc.com/climg/2cd8f16709d7a16a02820032.jpg

    是因为对 threading.Thread 类中 run 方法的重写使用方式有误。

    在 threading.Thread 类中,run 方法是在启动线程后自动调用的,并且它的定义是 run(self),即只接受 self 这一个参数(代表实例本身),

    不应该再额外传入其他参数 。

    https://img1.sycdn.imooc.com/climg/4b5da76709d7a3a508450307.jpg


    同学可以在 __init__ 方法中,通过 super().__init__() 先调用父类 threading.Thread 的构造函数,然后将传入的 name 参数保存为实例属性 self.name。在 run 方法中,直接使用 self.name 来获取之前保存的名称并进行打印操作,这样就符合 threading.Thread 类中 run 方法的调用规则,能够正确运行。

    参考代码如下:

    import threading
    class Father(threading.Thread):
        def __init__(self, name):
            super().__init__()
            self.name = name    
        def run(self):
            print("jjj" + self.name)
    father = Father(name="xxxx")
    father.start()

    祝学习愉快~


    2025-03-17 12:31:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师