Skip to content

下划线方法 & 虚拟环境

约 838 个字 14 行代码 预计阅读时间 4 分钟

魔法方法和受保护的方法

魔法方法

在 Python 中,双下划线方法(也称为魔法方法或特殊方法)和单下划线方法有不同的用途和含义。以下是对这些方法的详细解释:

双下划线方法(魔法方法) 双下划线方法(以双下划线开头和结尾)是 Python 中的特殊方法,通常用于实现对象的特殊行为。这些方法由 Python 解释器自动调用,通常不需要显式调用。常见的魔法方法包括:

常见的魔法方法

  • __init__(self, ...):构造方法,在创建对象时调用,用于初始化对象的属性。
  • __del__(self):析构方法,在对象被删除时调用,用于清理资源。
  • __str__(self):在使用 print() 或 str() 函数时调用,返回对象的字符串表示。
  • __repr__(self):在使用 repr() 函数或在交互式解释器中查看对象时调用,返回对象的正式字符串表示。
  • __len__(self):在使用 len() 函数时调用,返回对象的长度。
  • __getitem__(self, key):在使用索引访问对象时调用,例如 obj[key]。
  • __setitem__(self, key, value):在使用索引设置对象的值时调用,例如 obj[key] = value。
  • __delitem__(self, key):在使用索引删除对象的值时调用,例如 del obj[key]。
  • __iter__(self):在使用 iter() 函数或 for 循环遍历对象时调用,返回一个迭代器。
  • __next__(self):在使用 next() 函数获取迭代器的下一个值时调用。
  • __call__(self, ...):在将对象作为函数调用时调用,例如 obj()。
  • __enter__(self)__exit__(self, exc_type, exc_value, traceback):在使用 with 语句时调用,用于实现上下文管理。
Text Only
class MyClass:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return f"MyClass with value: {self.value}"

    def __len__(self):
        return len(self.value)

    def __getitem__(self, index):
        return self.value[index]

    def __setitem__(self, index, value):
        self.value[index] = value

    def __delitem__(self, index):
        del self.value[index]

    def __call__(self, *args, **kwargs):
        print("Called with arguments:", args, kwargs)

# 使用示例
obj = MyClass([1, 2, 3])
print(obj)  # 输出: MyClass with value: [1, 2, 3]
print(len(obj))  # 输出: 3
print(obj[1])  # 输出: 2
obj[1] = 42
print(obj[1])  # 输出: 42
del obj[1]
print(obj.value)  # 输出: [1, 3]
obj(10, 20, key="value")  # 输出: Called with arguments: (10, 20) {'key': 'value'}

getitem 使用索引访问;

call 当成函数访问。

受保护的方法

单下划线方法和变量(以单下划线开头)通常用于表示类的内部实现细节或受保护的成员。虽然 Python 没有真正的访问控制机制(如 private 和 protected),但使用单下划线是一种约定,表示这些成员不应在类外部直接访问。

是一种约定

Text Only
class MyClass:
    def __init__(self, value):
        self._value = value  # 受保护的成员

    def _internal_method(self):
        print("This is an internal method")

    def public_method(self):
        self._internal_method()
        print("This is a public method")

# 使用示例
obj = MyClass(42)
obj.public_method()
# 输出:
# This is an internal method
# This is a public method

# 虽然可以访问,但不推荐
print(obj._value)  # 输出: 42
obj._internal_method()  # 输出: This is an internal method
  • 双下划线方法(魔法方法):用于实现对象的特殊行为,由 Python 解释器自动调用。
  • 单下划线方法和变量:表示类的内部实现细节或受保护的成员,约定不应在类外部直接访问。

虚拟环境

(1)新建

m1 conda 安装

Bash
conda create -n dave python==3.8
conda activate dave
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=11.8 -c pytorch -c nvidia
conda install numpy
conda install scikit-image
conda install scikit-learn
conda install tqdm
conda install pycocotools

m2 requirements.txt 安装

Bash
conda create -n SegRNN python=3.8
conda activate SegRNN
pip install -r requirements.txt

(2)查看

Bash
conda env list

(3)激活

Bash
conda activate Autoformer

(4)退出

Bash
conda deactivate
add_circle2025-02-27 21:19:28update2025-04-18 15:30:39