下划线方法 & 虚拟环境¶
约 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
安装
(2)查看
(3)激活
(4)退出
2025-02-27 21:19:28 2025-04-18 15:30:39