1.Python中__init__()中声明变量必须都是self吗?
在Python中的类定义里,init() 方法是一个特殊的方法,称为类的构造器。在这个方法中,通常会初始化那些需要随着对象实例化而存在的实例变量。使用 self 是一种约定俗成的方式来引用实例本身。
这里有一些关键点:
并不是 init () 中声明的所有变量都必须以 self 开头。以 self 开头的变量是实例变量,它们对每一个类的实例都是唯一的。但是,你也可以在 init() 中声明局部变量,它们不以 self 开头,仅在这个方法的执行过程中存在。
只有那些需要跨方法在类实例之间共享的变量应该使用 self 前缀。这意味着这些变量将被附加到对象上并且对整个实例可用。
使用 self 的变量可以在类的其他方法中使用,因为它们是与特定的对象关联的。
下面是一个简单的例子来说明这个概念:
python
class MyClass:
def __init__(self, value):
self.instance_var = value # 这是一个实例变量
local_var = 'some value' # 这是一个在__init__方法中的局部变量
def another_method(self):
print(self.instance_var) # 正确: 可以访问实例变量
# print(local_var) # 错误: local_var 在这里是不可见的,因为它是 __init__ 的局部变量
在这个例子中,instance_var 是一个以 self 开头的实例变量,而 local_var 是 init() 方法中的一个局部变量。只有 instance_var 可以在类的其他方法中被访问和修改。
2.(1)python中__getitem__函数用法:主管索引
在Python中,__getitem__方法是一个特殊方法(也称作魔术方法),它用于定义对象的索引操作,也就是当对象使用中括号语法(例如obj[key])来获取某个元素时,会调用这个方法。这个方法的使用让你的对象支持序列和映射的数据模型。
python
class MyCollection:
def __init__(self, data):
self.data = data
def __getitem__(self, key):
return self.data[key]
# 现在创建一个MyCollection类的实例
collection = MyCollection([1, 2, 3, 4, 5])
# 使用索引来访问元素
print(collection[1]) # 输出: 2
print(collection[2]) # 输出: 3
# 也可以使用切片
print(collection[1:3]) # 输出: [2, 3]
3.python中字符串的split方法
在Python中,字符串对象有一个方法叫做 split(),它用于将字符串拆分成一个列表。默认情况下,该方法会使用空白字符(如空格、换行 \n、制表符 \t 等)作为分隔符,来分割字符串。你也可以指定一个字符串作为分隔符。
下面是 split() 方法的一些使用示例:
python
# 使用默认分隔符(空白字符)
text = "Hello world"
result = text.split()
print(result) # 输出: ['Hello', 'world']
# 使用指定的分隔符
data = "apple,banana,cherry"
result = data.split(',')
print(result) # 输出: ['apple', 'banana', 'cherry']
# 限制分割次数
data = "one two three four"
result = data.split(' ', 2)
print(result) # 输出: ['one', 'two', 'three four']
# 使用换行符作为分隔符
data = "line1\nline2\nline3"
result = data.split('\n')
print(result) # 输出: ['line1', 'line2', 'line3']
使用完分割后成为列表,可以紧跟[0]来读取列表中的元素。如下所示是先按照"_"分割,然后读取列表中的第一个元素。
python
label = target_dir.split("_")[0]
4.python中__call__()函数
在Python中,call ()是一个特殊的方法,用于使一个对象可以像函数一样被调用。当我们调用一个对象时,Python会尝试调用该对象的__call__()方法。
下面是一个简单的示例,展示了如何定义一个类并实现__call__()方法:
python
class Person():
def __call__(self, name):
print("Hello,"+name)
def Hello(self, name):
print("Hello,"+ name)
person = Person()
person("aa") # Hello,aa
person.Hello("aa") # Hello,aa
通过在类中实现__call__()方法,我们可以让对象具备函数的行为,使其可以被调用并执行特定的逻辑。这对于创建可调用的对象非常有用,特别是在某些情况下,我们希望对象能够像函数一样被使用。
5.Python中forward方法
在Python中,特别是在使用PyTorch这样的深度学习库时,forward 方法通常是一个类的成员函数,它定义了模型前向传播的计算过程。在PyTorch中,当你创建一个网络模型时,你通常会继承 nn.Module 基类,并在你的模型类中定义 forward 方法。
6.Python中super().init():继承
当你在一个子类的 init 方法中调用 super().init (),你实际上是在调用它的父类的 init 方法。这确保了父类被正确初始化,这样子类实例就可以继承父类的所有属性和方法。
7.Python继承
python
# 定义父类
class Animal:
def __init__(self, species):
self.species = species
def make_sound(self):
print("Some generic sound")
# 定义子类,继承自 Animal 类
class Dog(Animal):
def __init__(self, species, name):
super().__init__(species) # 调用父类的 __init__ 方法
self.name = name
def make_sound(self):
print("Woof!")
# 使用父类创建实例
generic_animal = Animal("Generic")
generic_animal.make_sound() # 输出: Some generic sound
# 使用子类创建实例
my_dog = Dog("Canine", "Buddy")
my_dog.make_sound() # 输出: Woof!
print(my_dog.species) # 输出: Canine
print(my_dog.name) # 输出: Buddy
print(my_dog.species) 这一步子类继承了父类的属性,可以调用输出species。
关于super这一步继承,在深度学习视频中看到super(Tudui, self).init ()这样子写,根据Python3中的语法现在已经不需要在super()中具体指明继承哪一个对象了
但是父类中的属性要卸载后面的__init__()括号中,父类有几个就写几个,跟cpp是一样的