You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:02:38