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

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

为什么Python类语法应该不同?相关推荐

  1. python 类和对象 有必要学吗_Python学习——对类和对象的初步理解,初识,与

    大家好,今天跟大家简答介绍一下类的基础知识,主要有: Python中类和对象的概念 Python中的函数和普通函数的对比 python类语法的初识 一.Python中类和对象的概念 我们把一类相同的事 ...

  2. python基础语法复习[二] 函数、类

    python基础语法复习[二] 前言 一.函数 1.基本概念 2.一般实例 3.参数传递 (1)传不可变对象 (2)传可变对象 4.函数递归调用实例 (1)eg:实现字符串的反转: (2)递归思想画树 ...

  3. Python类的定义和基础语法

    Python类的概念 类是封装对象的属性和行为的载体,具有相同属性和行为的实体被称为类:这是一个抽象的概念 封装 将对象的属性和行为封装起来,类是它的载体:类会隐藏其实现细节:封装思想保证了内部数据结 ...

  4. Python 类—类属性(私有属性、公有属性、实例属性、局部变量)类方法(实例方法、静态方法)

    1. 创建类 类是对某个对象的定义,它包含有关对象动作方式的信息,包括它的名称.方法.属性和事件.类不存在于内存中,因此它本身并不是对象.当程序运行需要引用类的代码时,就会在内存中创建一个类的新实例, ...

  5. python array 语法_Python基本语法

    Python基本语法 1. 输出语句 ​* print() ​* 关键字 ​* nonloacl 用来声明外层的局部变量 ​* global用来声明全局变量 2. if...else语句 * if 5 ...

  6. python 类中定义类_Python中的动态类定义

    python 类中定义类 Here's a neat Python trick you might just find useful one day. Let's look at how you ca ...

  7. Python上下文语法with小述

    Python上下文语法with小述 本文环境python3.5.2 上下文语法with 该语法糖主要便于在Python的编程过程中,能够有效管理防止编程过程中,对有关资源编程时忘记释放的问题,比如通过 ...

  8. python类对象和实例对象

    类对象支持两种操作:属性引用和实例化. 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name. 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称. 因此,如果类定 ...

  9. 吾八哥学Python(四):了解Python基础语法(下)

    咱们接着上篇的语法学习,继续了解学习Python基础语法. 数据类型 大体上把Python中的数据类型分为如下几类:Number(数字),String(字符串).List(列表).Dictionary ...

最新文章

  1. NGS的测序仪和相关技术时间轴 NGS相关数据库和项目时间轴
  2. linux图形登陆报拒绝权限,Linux-权限被拒绝?
  3. .NET领域最为流行的IOC框架之一Autofac
  4. 手把手教你配置Kali Linux
  5. 【STM32】DMA详解
  6. SocketIO---bio2---带线程池处理任务
  7. bash: gitbook: command not found
  8. linux树莓派 ssh密码,树莓派之SSH连接经验
  9. Tipard Video Converter Ultimate如何旋转视频?
  10. 随想录(对比着c学java)
  11. 学python之前要学c语言吗_学Python之前需要学c语言吗
  12. maven的setting文件简单配置
  13. 任正非回应“华为营收下降300亿美元”;今日头条澄清「通讯录不属于用户隐私」;Kotlin 1.3.40发布 | 极客头条...
  14. 李开复《纽约时报》专栏:美国对中国AI的几大误解
  15. Debian - NFS搭建 + 测试
  16. PHP漏洞全解—————9、文件上传漏洞
  17. 反激式开关电源设计资料
  18. mybatis3-中文文档
  19. 智能优化算法——篇1
  20. 图注意力网络GRAPH ATTENTION NETWORKS(gat)浅读

热门文章

  1. Asp.net Web.Config - 配置元素 httpCookies
  2. 怎样判断RadioButtonList控件是否有选择
  3. Java Jdbc减少交互提升批量处理性能,到底该如何优化才好?
  4. 跨浏览器Ajax调用封装
  5. dreamweaver 疑问
  6. php如何存到磁盘,php缓存----磁盘缓存
  7. 【VC基础】1、特性和分类
  8. 【转载】ABAP 字符串 ‘‘ || `` 区别
  9. Insert Data into Sorted Table
  10. SM37job状态意义