python基础能做什么,python基础教程是什么意思

  python基础能做什么,python基础教程是什么意思

  序

  我就不说OOP的概念了。我想我很了解它。

  Oop的三个特点:继承性、封装性和多态性。Python作为一门动态语言,不仅实现了静态语言这三大特性的常规功能,还扩展了许多面向对象的新特性。

  新型班级

  在python以前的版本中,Python还是用的老类,现在基本上是新类了。两者在写作上的差异

  类别Myclass:

  类Myclass(对象):

  新类直接或间接继承自object的基类。如果没有可以明显继承的父类,那么在括号中添加object,声明它是一个新类。与旧类相比,新类最大的变化是当父类搜索本类中不存在的属性时,将深度优先搜索从以前的深度优先搜索改为广度优先搜索。这种变化的原因也与新类的类继承的层次关系有关。对于A类(B,C),如果仍然使用广度优先搜索,会从B递归搜索到对象基类,这样在继承更多的类时,每次都会重复访问对象基类,降低了效率。

  新类还首次增加了一些旧类没有的新属性,比如_ _ slots _ _ _ setattr _ _ _ class _ _等等。

  密封和包装

  这里需要结合上一篇文章python- Namespace和Scope来解释类对象的有效原理。

  定义一个类时,会在当前的局部范围内创建一个命名空间,即类名到类对象的映射,类中的属性要用类名的前缀来引用。

  对于类中定义的变量,是类变量和实例变量之间的差异。一个类对所有实例都是可见的,而单个实例中的变量只对它自己可见。

  类Myclass(对象):

  a=1

  def __init__(self,b):

  self.b=b

  A=我的类(2)

  B=Myclass(3)

  第一条

  学士学位#1

  A.a=100

  文学士#100

  A.b #2

  B.b #3

  类中定义的函数和实例化对象中使用的函数都称为方法。方法和普通函数的区别在于方法的第一个参数是self。例如,这种方法的本质是将实例化的A对象和方法参数组装成一个新的参数列表来调用类中的函数a.f (a.f(param)。

  __word__声明的属性是特殊的变量或方法。正常情况下,我们不需要它。上面例子中__init__的函数是在类实例化时初始化实例的一个特殊方法,相当于c中的构造函数,实际中经常使用这个方法向实例化传递参数。

  看看下面的类:

  班级学生(对象):

  测试类

  kind=school

  def __init__(自己,姓名,年龄):

  self.name=name

  年龄=年龄

  定义输出(自身):

  打印(自己的名字)

  打印(自我年龄)

  定义年龄(自己,年龄):

  年龄=年龄

  艾伦=学生(艾伦, 22 )

  彼得=学生(彼得, 23 )

  打印(Allen.kind)

  打印(Peter.kind)

  打印(Allen.name,Allen.age)

  打印(彼得.姓名,彼得.年龄)

  对于class Student,实例化了两个对象Allen和Peter,它们分别具有name age属性和common kind属性。封装的好处是不需要关心类外具体方法的实现,而是可以抽象操作方法并提供。例如,上例中的output方法也可以通过setage重置实例对象的age属性。

  当然c中有私有变量和公共变量的区分,目的是为了保护一些重要的变量不被随意或无意的修改。Python在这方面也提供了访问限制。

  在class属性之前,添加一个下划线_来声明该变量是私有变量。如果您看到class属性带下划线,正确的做法是不要使用它。但这都要靠自觉!加载其他模块时,不会加载带有_ declaration的变量和方法。Python并没有真正隐藏属性,它依靠这些常规规则来避免麻烦。

  当继承关系很深时,命名新类的属性可能会很头疼。因为你要考虑到新的命名会覆盖父类中哪个你不知道的属性。这种情况下可以在属性前加一个双下划线_ _ python解释器会把这样的变量解析成_classname__word,这样不同类名的前缀就避免了覆盖父类属性的麻烦。例如,在上面的示例中,当所有的self.name都更改为self时。_ _名称,并通过Allen访问。_ _ names,将会报告一个错误,因为解释器已经更改了变量名。当然,在类内部,可以添加getage()方法来访问。类中属性的命名仍然可以通过self访问。_ _名称。(虽然可以通过Allen强制访问name属性。_ Allen _ _课外名,不推荐!风险自担)

  继承

  继承很简单。在类Myclass()的括号中,只需添加需要继承的类。与java中的单一继承不同,python允许多重继承!也就是说,A类(B,C)继承了B类和C类.当然,这里有一个问题。当调用一个不在类A中的属性时,应该寻找哪个父类呢?你可以专门阅读这篇文章,直接看例子:

  A类:

  def __init__(self):

  及格

  定义保存(自己):

  打印(“这是来自A”)

  B(A)类:

  def __init__(self):

  及格

  丙类(甲类):

  def __init__(self):

  及格

  定义保存(自己):

  打印(“这是来自C”)

  D类(B、C类):

  def __init__(self):

  及格

  fun=D()

  fun.save()

  一个很简单的例子,如果来自A,就是深度优先搜索,如果来自C,就是广度优先搜索。当然,覆盖父类的现有方法会覆盖原来的实现,通过上面提到的双下划线命名机制可以避免冲突。子类可以通过super()调用父类中的方法。

  可以通过isinstance(object,class)判断一个对象是否是一个类的实例。还可以通过issubclass(class1,class2)判断class1是否是class2的子类。

  多态的

  python中的多态功能非常强大,它支持duck类型。先看有继承关系的类中的多态性:

  类人类(对象):

  def out(自身):

  印刷品(“我生活在地球上”)

  亚洲人(人类):

  def out(自身):

  印刷品(“我住在亚洲”)

  中文类(亚洲):

  def out(自身):

  印刷品(“我住在中国”)

  定义运行(人):

  person.out()

  A=人类()

  B=亚洲人()

  C=中文()

  运行(A)

  运行(B)

  运行(C)

  结果:

  我生活在地球上

  我住在亚洲

  我住在中国

  只定义了一个函数run(person),但是可以调用三个类中的方法。这就是多态的魅力。不要在意传入对象的具体信息,只要实现了out方法,就可以调用。当然,只要你的父类中有实现,就可以调用有继承关系的类。

  对于静态语言来说,函数是在定义的时候定义的,所以多态的威力仅限于只有继承关系的类。Python这种动态语言,只要你定义的对象有out()方法就可以调用,甚至不需要你是函数定义参数的子类。例如在上面例子中添加的。

  动物类(对象):

  def out(自身):

  打印(“我不是人。”)

  输出

  我生活在地球上

  我住在亚洲

  我住在中国

  我不是人。

  Animals并不是Humen的子类,只是因为它实现了out()方法,所以可以被run()函数调用。这就是著名的鸭式。在动态语言中,不需要严格的继承。只要这个物体长得像鸭子,走路像鸭子,就当它是鸭子!

  接触过网络编程的同学应该很容易想到网络编程中有相关的实现。比如读写一个文件,你会调用这些方法open() read() write()来操作文件,但是有很多特殊的文件是可以通过这三个API来调用的,比如socket描述符,pipe管道等等。这些东西和文件一样长,所以可以被这些API调用!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: