才入门python一年,今天突然看到一个讨论注释的问题。然后就想到了python里面的注释。在我学习python的时候,各种专业书籍、官方文档这些,都说#是单行注释,三引号是多行注释。但是在写代码时候,三引号又可以被当成字符串来使用。
但注释是写给人看的,程序在运行时是不会去管注释里面内容的。那我想问问python有没有多行注释
没有多行注释
'new \
bee \
'
这就说明python会读取并处理注释内容,其它语言的注释比如c好像没有吧,ps:这c方面我未曾深入了解,勿喷
你大概没学过编译原理
三引号必须放在行首
如果代码中起到注释作用的代码就是注释,那么说三引号是注释这没有什么不妥(单引号需要在结尾加上\,那用起来和#构成的多行注释体现不了便捷性),这也是大多数人的理解。我这么说并没有任何问题。
但是如果你非要说被解释所以不算注释,那你也能自圆其说,也没什么好争论的。(也许你想表达的是被执行,因为作为解释语言,自然一切都要进行解释,包括注释,要是不解释,怎么知道这是注释呢。但是你又怎么知道单独写的内容会被执行?从优化的角度来说,这是一个匿名变量,没有任何变量引用,完全可以被优化掉,你写变量名 = 字符串,和单独写字符串,这根本不是一回事)
就好比通常来说,大家都认为C++是一种编译语言,但是C++的模板元编程是图灵完备的,你也可以把C++的编译器当作一个解释器,把所有的程序都写成编译的过程就执行完毕了,从而你声称全世界都错了,C++是解释语言。这种说法不能说错,但是没有什么现实意义。
我再多说几句。Python语言的一个设计思想就是简洁——如无必要勿增实体。举例来说,有的语言会专门有构造函数的语法,有属性访问器的语法,但是在Python里,使用魔术方法——魔术方法的本质是,对于程序员来说,这是一种约定,对于解释器本身的实现来说,没有增加任何新的功能实现。将语言特性层面的事情前移到代码风格约定上去解决。既然一个多行字符串变量可以起到注释的作用,那么就没有必要再引入不同的语法,在这种情况下作为注释的字符串,就是注释。
这种在用户层面定义功能,但是实际上“偷懒”的做法在软件开发中比比皆是。微软在早期推出过一款叫做 IE 的浏览器,这款浏览器具有“收藏夹”功能,现在的浏览器也有将这个功能叫做书签的。但是本质上,微软没有为收藏夹开发什么实质的功能——收藏夹的本质其实就是一个favourites目录的文件的列表,而每个文件就是一个指向某个网页的快捷方式而已。而微软的Word中有一个"首字下沉"的功能,听上去很高大上,其实它不过是一个宏,将第一个字装入一个嵌入正文环绕的文字框,并且改大字体。以上两例设计,显然也不能不承认对应的功能的存在。
不知道你这个问题是否已经解决, 如果还没有解决的话:import abc #利用abc模块实现抽象类
class All_file(metaclass=abc.ABCMeta):
all_type='file'
@abc.abstractmethod #定义抽象方法,无需实现功能
def read(self):
'子类必须定义读功能'
with open('filaname') as f:
pass
@abc.abstractmethod #定义抽象方法,无需实现功能
def write(self):
'子类必须定义写功能'
pass
class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('文本数据的读取方法')
def write(self):
print('文本数据的读取方法')
class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('硬盘数据的读取方法')
def write(self):
print('硬盘数据的读取方法')
class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('进程数据的读取方法')
def write(self):
print('进程数据的读取方法')
wenbenwenjian=Txt()
yingpanwenjian=Sata()
jinchengwenjian=Process()
#这样大家都是被归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()
jinchengwenjian.read()
print(wenbenwenjian.all_type)
print(yingpanwenjian.all_type)
print(jinchengwenjian.all_type)
# 抽象类 : 规范
# 一般情况下 单继承 能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现
# 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中
# 抽象类还是接口类 : 面向对象的开发规范 所有的接口类和抽象类都不能实例化
# java :
# java里的所有类的继承都是单继承,所以抽象类完美的解决了单继承需求中的规范问题
# 但对于多继承的需求,由于java本身语法的不支持,所以创建了接口Interface这个概念来解决多继承的规范问题
# python
# python中没有接口类 :
# python中自带多继承 所以我们直接用class来实现了接口类
# python中支持抽象类 : 一般情况下 单继承 不能实例化
# 且可以实现python代码