文章目录
一、Python和java中super的使用区别
在 Java 和 Python 中,子类调用父类方法的语法略有不同:
1 Java 中
使用 super 关键字:在子类中,可以使用 super 关键字来调用父类的方法。super 关键字可以用来引用父类的构造方法或普通方法。
(1)调用父类构造方法:super(参数)
- 调用父类构造方法:在子类的构造方法中使用 super() 调用父类的构造方法。例如:
public class Child extends Parent {
public Child() {
super(); // 调用父类的无参构造方法(java里面这种无参构造java虚拟机就算你不写也会自动加上)
super(参数); // 调用父类的有参构造方法
}
}
如果父类有带参数的构造方法,可以通过 super(参数) 的形式传递参数给父类构造方法。
(2)调用父类普通方法:super.方法名()
- 调用父类普通方法:在子类中可以使用 super.方法名() 的形式调用父类的普通方法。例如:
public class Parent {
public void printMessage(参数) {
System.out.println("Hello from Parent");
}
}
public class Child extends Parent {
public void printMessage() {
super.printMessage(参数); // 调用父类的 printMessage 方法
System.out.println("Hello from Child");
}
}
2 Python
使用 super() 函数:Python 中的子类可以使用 super() 函数来调用父类的方法。super() 函数用于获取父类的对象,并且可以调用父类的方法。
(1)调用父类构造方法:super().init(参数)
- 调用父类构造方法:在子类的 init 方法中使用 super().init() 来调用父类的构造方法。例如:
class Parent:
def __init__(self):
print("Parent initialized")
class Child(Parent):
def __init__(self):
super().__init__(参数) # 调用父类的构造方法
print("Child initialized")
(2)调用父类普通方法:super().方法名(参数)
- 调用父类普通方法:同样地,在子类中可以使用 super().方法名() 的形式调用父类的普通方法。例如:
class Parent:
def print_message(self):
print("Hello from Parent")
class Child(Parent):
def print_message(self):
super().print_message() # 调用父类的 print_message 方法
print("Hello from Child")
(3)python2版本的调用语法(淘汰)
另外,在pytorch搭建网络还延续了,Python2的super(当前类,self)使用习惯,在 Python 2 中,super 需要传递两个参数:当前类和 self 对象。但现在Python3这种语法已经可以抛弃了,直接super(),后面空括号就可以了,但pytorch大家搭建网络都还延续了Python2的那个习惯就随大流吧!
class RNN(nn.Module):
def __init__(self):
super(RNN, self).__init__() # super().__init__() python3现在只需要这样
self.rnn = nn.LSTM( # if use nn.RNN(), it hardly learns
input_size=INPUT_SIZE,
hidden_size=64, # rnn hidden unit
num_layers=1, # number of rnn layer
batch_first=True, # input & output will has batch size as 1s dimension. e.g. (batch, time_step, input_size)
)
self.out = nn.Linear(64, 10)
def forward(self, x):
# x shape (batch, time_step, input_size)
# r_out shape (batch, time_step, output_size)
# h_n shape (n_layers, batch, hidden_size)
# h_c shape (n_layers, batch, hidden_size)
r_out, (h_n, h_c) = self.rnn(x, None) # None represents zero initial hidden state
# choose r_out at the last time step
out = self.out(r_out[:, -1, :])
return out
二、Pycharm与IDEA中关于当前工作路径的区别
1 区别
在学习相对路径的时候,我们学过相对路径都是相对于当前工作目录而言的,由于Pycharm与IDEA中关于当前工作路径的默认设置有一定区别,所以在相对路径的处理上就会产生不同效果了。
-
PyCharm 中默认的当前工作目录
在 PyCharm 中,默认情况下,当前工作目录通常会被设置为项目的根目录,但如果你是在运行一个脚本,它可能会选择该脚本所在的目录的上一级作为当前工作目录,或者基于运行/调试配置中的指定设置。 -
IntelliJ IDEA 中默认的当前工作目录
在 IntelliJ IDEA 中(特别是对于 Java 项目),默认的当前工作目录通常是项目的根目录,而不是源代码目录(如 src)。因此,如果你在 Java 中运行时没有指定路径,它默认会在项目根目录下创建文件。
简单来说,无论你在IDEA里面多深的位置运行一个JAVA文件,当前工作路径都是最上层的项目根目录,而不会是当前正在运行的java文件的父文件(这是与Pycharm典型的差别)
我们可以用代码来验证这一点:
PyCharm:

IntelliJ IDEA

可以看到区别很明显
【注】:Pycharm和IntelliJ IDEA都可以在设置中改变当前工作目录,但我们一般使用默认就可以了,就不要给自己找事情了。
2 Pycharm中使用相对路径
上面这个区别主要影响到的就是相对路径的使用注意在切换语言时
都以相对路径的文件操作为例子吧!
PyCharm:

3 IDEA中使用相对路径
IntelliJ IDEA

可以看到给我们干到根目录下面去了,不是在 Study\demo\src\cn\hjblogs\demo下
如果我们非要到Study\demo\src\cn\hjblogs\demo下可以

三、 pycharm与idea中环境变量的配置与使用
关于这个两款编辑器中环境变量的配置与使用是差不多的。
1 IDEA
在 IntelliJ IDEA 中设置 Environment Variables(环境变量) 是为了在运行或调试 Java 程序时,向程序传递一些动态的配置信息。这些环境变量可以在程序运行时通过 System.getenv() 方法读取,从而实现灵活的配置管理。
- 为什么要设置环境变量?
在开发中,有些配置信息(如数据库连接信息、API 密钥、调试模式开关等)不适合直接硬编码在代码中,而是希望通过外部配置动态传入。环境变量是一种常见的方式,它可以让程序在不同的运行环境中(如开发环境、测试环境、生产环境)使用不同的配置,而无需修改代码。
例如下面我们就可以使用环境变量动态的配置数据库的连接信息:
public class Test {
public static void main(String[] args) {
String dbUrl = System.getenv("DB_URL"); // 从环境变量中获取数据库连接信息,数据库的url
String dbUser = System.getenv("DB_USER"); // 从环境变量中获取数据库连接信息, 数据库的用户名
String dbPassword = System.getenv("DB_PASSWORD"); // 从环境变量中获取数据库连接信息, 数据库的密码
System.out.println("Connecting to database:");
System.out.println("URL: " + dbUrl);
System.out.println("User: " + dbUser);
System.out.println("Password: " + dbPassword);
}
}
- 配置环境变量:
注意idea中要用 ;分隔
DB_URL=jdbc:mysql://localhost:3306/mydb;DB_USER=root;DB_PASSWORD=secret


- 运行结果:动态的拿到了环境变量中的数据库连接信息

2 pycharm
待定
5661



被折叠的 条评论
为什么被折叠?



