如何修改pip导入模块中类__init__内的self.bits_in_hash值?
解决方案
你的问题出在:你修改的是类属性,但VideoHash的__init__方法里每次实例化都会给实例属性self.bits_in_hash硬编码赋值为64,会覆盖你设置的类属性。下面给你几种可行的解决办法:
方法1:实例化后直接修改属性
每次创建VideoHash实例后,立刻修改该实例的bits_in_hash值:
from videohash import VideoHash vh = VideoHash() vh.bits_in_hash = 128 # 直接修改实例属性
这种方法简单直接,适合单次使用的场景。
方法2:继承子类重写__init__
如果需要多次创建默认128位的实例,写个子类重写__init__:
from videohash import VideoHash class VideoHash128(VideoHash): def __init__(self) -> None: super().__init__() # 调用父类的初始化逻辑 self.bits_in_hash = 128 # 覆盖父类设置的64 # 之后用子类创建实例 vh = VideoHash128() print(vh.bits_in_hash) # 输出128
这样所有子类实例默认都是128位,不用每次手动修改。
方法3:猴子补丁修改原类的__init__
如果你不想用子类,直接修改原类的__init__方法,让它默认设置128:
from videohash import VideoHash # 保存原__init__方法 original_init = VideoHash.__init__ def new_init(self) -> None: original_init(self) # 执行原初始化逻辑 self.bits_in_hash = 128 # 覆盖为128 # 替换原类的__init__ VideoHash.__init__ = new_init # 现在创建实例默认就是128位 vh = VideoHash() print(vh.bits_in_hash) # 输出128
注意这种方法会影响所有后续创建的VideoHash实例,全局生效,按需使用。
内容的提问来源于stack exchange,提问作者Jordan Kizer
相关产品推荐
相关产品推荐

