python必备知识点,Python的基本知识

  python必备知识点,Python的基本知识

  #前言

  面向对象编程离不开类。通过实例化类,创建了对象。还有一些关于PYTHON类的知识点或者难点需要研究和探讨。本文主要从以下几个方面进行论述:

  基本属性的类型和范围方法的类型及区别;关于理解多态、继承和重写的问题;多重遗传

  #基本功能

  使用class定义类的属性和方法。基本形式如下:class person:count=0 def _ _ init _ _(self,name): self。name=name def work (self):打印“work”。一旦你有了一个类,你就可以通过它创建对象。类的基本特征是封装、继承和多态。

  封装很容易理解。属性和方法封装在类中,具体的东西用类来描述。

  继承,由一个类创建的对象,具有该类的属性和方法,或者可以从该类派生出一个子类,该子类可以继承父类的属性和方法。

  多态性的概念不容易解释清楚,这将在下面讨论。

  #属性的类型和范围

  属性分为:

  属性类属性

  # #类别属性

  有些书叫实例变量或者类变量。例如,前面代码中的count是一个class属性,class属性存在于class范围内。类作用域中的属性特征:可以被类访问,可以被所有实例访问,可以被屏蔽。

  示例:class person:count=0 def _ _ init _ _(self,name):self . name=name def increase(self):person . count=1 defwork(self):打印 work 操作如下:

  P1=坚持(张三)P1。增加()P2=坚持(李斯)P2。increase()print persistence . count print P1 . count是可见的,可以由类和实例访问。如果执行

  P1 . count=10 print P1 . count print person . count可见类的计数被P1的计数屏蔽。

  # #实例属性

  instance属性很简单,就是在实例中使用,Person类的名字就是instance属性,通常由self声明。构造函数中的XXX。

  # #私人

  #方法的类型和差异

  这里提到的方法是指类中定义的方法,包括:

  方法静态方法类方法构造函数

  # #实例方法

  类中指定的参数中有(self)方法,与函数不同。

  例如,亲自增加(自我)的方法

  如果increase()方法参数中什么都没写,虽然代码没有报错,但是好像这个方法也不能用了。班级人员:def AAA():打印“a”.person.aaa () traceback(最近一次调用last):moduleTypeError中文件 stdin 的第1行:调用未绑定方法aaa()时必须将person实例作为第一个参数(结果什么也没有得到)p=Person() p.aaa() Trace back(最近一次调用last):module type中文件 stdin 的第1行错误:aaa()不带任何参数(给定1)# # class方法

  用@classmethod修饰的方法是类方法,例如

  班级人员:

  计数=0

  @classmethod

  def cmeth(cls):

  打印客户数量

  相当于:

  班级人员:

  计数=0

  def cmeth(cls):

  打印客户数量

  cmeth=classmethod(cmeth)

  # #静态方法

  用@staticmethod修饰的方法是静态方法,参数是空的,不用写什么,比如:

  班级人员:

  …@静态方法

  … def smeth():

  …打印“静态方法”

  这有什么用?我觉得好像是定义在类里的函数,而且好像函数也可以代替它的函数。

  # #比较这三种方法

  主要区别在于参数。方法的隐含参数是类实例self,而类方法的隐含参数是类本身的cls。

  静态方法没有隐式参数。

  # #构造函数

  用init()做

  我不多说了。

  #继承和重写的问题

  继承,参见下面的例子:

  班级人:def __init__(self,name):self . name=name班级学生(Person):pass班级老师(Person): def __init__(self,Age): self。age=ages=student(张三)print s.name t=Teacher(30)print t . name输出s . name可以看出,student类继承了父类的name属性,但是老师由于重写构造函数丢失了name属性,导致了错误。

  继承父类的构造函数的编写

  因此,如果需要重写构造函数,就需要继承父类的构造函数。否则,如果父类中的实例属性没有被继承,您可能会得到一个错误。它是这样写的:

  第一种方法:

  班主任(人):def _ _ init _ _(本人,姓名,年龄):人。_ _ init _ _ (self,name)self . age=aget=teacher( Lisi ,30) printt.name显式调用父类构造函数解决问题,或者super第二种方法。

  班级人:def __init__(自己,姓名):Self . name=name班主任(人):def __init__(自己,姓名,年龄):超级(老师,自己)。_ _ init _ _(name)self . age=aget=teacher( Lisi ,30) printt.name使用super后发现错误,

  Traceback(最近一次调用last):File /Users/wz/class _ python . py ,第10行,在模块t=Teacher(lisi ,30)File /Users/wz/class _ python . py ,7,在_ _ init _ _ super (teacher,self)。_ _ init _ _(name)type错误:super()参数1必须是type,而不是class obj。这里需要注意的是,使用super时,父类必须有继承的类,如果没有,使用object。

  修改为:

  class person(object):def _ _ init _ _(self,name): self.name=name所以没问题。这两种方法有什么区别?

  建议使用super,在处理多重继承时会更智能。

  #再次谈论多态性

  而且继承和封装都很好理解,那么多态应该怎么理解呢?

  从字面上看,多态性是多种形式。我觉得多态性可能体现在很多方面。

  例如,person类继承学生和教师。这是不是也是人的各种形态,属于多态的范畴?

  比如方法重复后,有很多形式。

  再比如list dict有len功能。是否多态?

  您可以使用对许多类型进行操作。运算符是多态的吗?

  所以我觉得多态性可能体现在各个方面。有了类和继承,类多态自然就出现了。

  #多重继承

  指一个子类继承多个父类,这在java中似乎是不允许的,但是java可以实现多个接口。

  这里需要注意的是,先继承父类的方法优于老师的方法。

  先写这么多课堂上需要注意的知识点,感觉可能没有全部总结,想到了再补充。

  #参考:

  Python类属性和实例属性http://python.jobbole.com/85100/的探讨

  Python超级用法:

  https://www.cnblogs.com/wjx1/p/5084980.html

  https://www.cnblogs.com/lijunjiang2015/p/7802410.html的私有制

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

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