前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么Python类语法应该不同?

为什么Python类语法应该不同?

作者头像
小小科
修改2020-07-27 18:10:44
4540
修改2020-07-27 18:10:44
举报
文章被收录于专栏:北京马哥教育

如果您已经使用了任何编程语言很长一段时间,您就会发现您想要的东西跟它原有的是不同的。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。不是因为这不会更好(或者这会更好),而是因为这样的改变在晚期是不切实际的。我想它可以添加成一种替代语法,但是很难确定,对于初学者来说,为类提供两种语法会更好。

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

文章转载于马哥教育官网!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档