gpt4 book ai didi

python - 如何避免长类定义中的 "unnecessary"缩进?

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:00 26 4
gpt4 key购买 nike

在 Perl 和 C++ 中可以选择通过定义来编写类方法定义类外的方法,从而避免额外的级别缩进。

当然那些语言是自由形式(与 Python 相比),因此您不需要严格地为每个添加缩进嵌套级别,但通常为了可读性而这样做。

例如,在 C++ 中,以下类定义(方法 #1):

class X {
void x_method(int a, int b) {
// implementation details follows here.. Note: extra indentation
}
};

也可以用类外的方法定义来写(方法#2):

class X { 
void x_method(int a, int b);
};
void X::x_method(int a, int b) {
// implementation details follows here
}

在 Perl 中,您可以将第一个版本编写为:

package X {
sub x_method {
my ($a, $b) = @_;
# implementation details follows here
}
}

并且您可以使用此样式避免方法定义的额外缩进:

package X; 
sub x_method {
my ($a, $b) = @_;
# implementation details follows here
}
package Y; # marks the start of another class
# ...

在这些我使用了一个小类定义,它扩展小于可以在计算机屏幕上查看的行数(比方说少于 50 行)。对于此类定义,使用方法 1类里面很好。但是,一旦类定义变为数百行,我更喜欢方法#2 通过定义类类外的方法。

但是,我在 Python 中找不到这种方法。我该怎么做 在 Python 中排名第二?

在我看来你在 Python 中只有方法#1:

class X:
def x_method(a, b):
//implementation details follows here

我想要类似的东西(方法 #2):

class X:  
def x_method(a, b):
# implementation details..

class Y: # marks the start of another class
# ...

当类定义中方法(和行)的数量 增加,我认为 appraoch #1 变得越来越冗长。然后,我能看到额外空间(缩进)的唯一目的是表示方法属于给定的类 X。并且该信息(方法属于给定类)不需要扩展和传播越来越多的线作为类定义增长。将这些信息包含在 Perl 中的单行(使用包语句),或单个前缀词 在 C++ 中,在方法上使用命名空间结果前缀运算符 名称在其定义的第一行。

我对 Python 不太熟悉,而且来自其他语言感觉就像我在冗余空间中窒息(使用方法#1)对于大型类定义,它会分散我对编程的注意力任务。我在这里缺少什么?

额外的缩进也迫使你打破更多的行以保持在建议每行限制 80 个字符。

最佳答案

你不能在 python 中使用方法#1,因为除了类之外,可能还有顶级函数定义,所以 python 将无法确定下面示例中的 global_function 是否真的是全局的或者属于 X 类:

class X:  
def x_method(a, b):
# implementation details..

def global_function(x):
# implementation

class Y: # marks the start of another class
# ...

但是有一种方法可以像这样减少缩进(但它会用属于该类的函数污染全局命名空间):

def x_method(self, b):
#implementation

class X:
x_method = x_method

关于python - 如何避免长类定义中的 "unnecessary"缩进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com