VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • 为什么Python类语法应该不同?

如果您已经使用了任何编程语言很长一段时间,您就会发现您想要的东西跟它原有的是不同的。Python对我来说是真的是这样。如果可以的话,对于Python中很多的我想要改的东西,我有很多的想法。现在我向您讲述其中一个:类定义的语法。

但是,让我们先从定义函数的语法开始。它有一个非常好的特性:函数定义看起来像它们相应的函数调用。函数定义如下:

def func_name(arg1, arg2):

当您调用该函数时,您使用类似的语法:函数名称和括号中以逗号分隔的参数列表:

x = func_name(12, 34)

只需调整调用中的标点符号,使其与函数定义中的位置一致,就可以看到arg1为12,而arg2为34.很好。

好了,现在让我们来看一下如何定义一个带有基类的类:

class MyClass(BaseClass, AnotherBase):

要创建此类的实例,请使用类的名称和括号,但现在并行性已经消失。您并没有传递BaseClass来构造MyClass:

my_obj = MyClass(...)

如果只是看一下这个类,您并不知道要向括号中传入什么来构造一个MyClass对象。因此“def”和“class”具有非常相似的语法,而且函数调用和对象创建具有非常相似的语法,但在创建对象时,模仿函数调用中能引导您得到正确结果的写法,则完全行不通。

这是专家很容易一眼就带过的事情。它们习惯于使用神秘的语法,类似的东西在稍不同的语境中具有不同的含义。而且很多东西在编程语言中是不可避免的:有很多符号,还有更多的概念。必然会有重叠。

但是我们可以做得更好。为什么使用看起来像函数调用的括号来表示基类?这里有一个更好的语法:

class MyClass from BaseClass, AnotherBase:

这不仅避免了误导性的标点符号并行,甚至还借用了我们用来讨论类的英语:MyClass派生自BaseClass和AnotherBase。而且“from”已经是Python中的关键字。

顺便说一下,即使是专家也会偶尔会犯错误,将想用”class“的地方写成了”def“,类似的语法意味着代码是有效的。回溯之前不会发现错误,这可能令人困惑。

我并不是要严肃地提议改变Python。不是因为这不会更好(或者这会更好),而是因为这样的改变在晚期是不切实际的。我想它可以添加成一种替代语法,但是很难确定,对于初学者来说,为类提供两种语法会更好。

但我认为,尝试像困惑的初学者一样来看我们熟悉的情景,这很有益处。替代语法仅有助于向他们解释它,并可能帮助我们在未来做出更好的选择。

英文原文:nedbatchelder.com//blog

相关教程