python基础
文章平均质量分 79
夏天的学习日记
某不知名计算机类研究生,分享自己的学习日常和论文阅读
展开
-
面向对象编程技术从0总结——“让你对基础技术有一个新的认识”(国庆五万字总结)
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。原创 2022-10-06 20:38:32 · 1533 阅读 · 51 评论 -
面向对象编程之断言assert
如果Expression1为假,则抛出一个 AssertionError,这是一个错误,而不是一个异常,也就是说是一个不可控制异常(unchecked Exception),AssertionError由于是错误,所以可以不捕获,但不推荐这样做,因为那样会使你的系统进入不稳定状态。是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。但是同时我们可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。原创 2022-09-29 20:21:39 · 1369 阅读 · 6 评论 -
面向对象编程之自定义异常处理
八股文:实现自定义异常类需要继承 Exception 类或其子类,如果自定义运行时异常类需继承 RuntimeException 类或其子类。在编码规范上,一般将自定义异常类的类名命名为 XXXException,其中 XXX 用来代表该异常的作用。自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。问题1:当写程序的过程中没有预料到异常,但是在交付给用户的过程中发生异常了怎么办?原创 2022-09-29 18:29:03 · 842 阅读 · 1 评论 -
面向对象编程之异常处理
在 Python 中,把程序运行时产生错误的情况叫做异常。出现异常情况有很多,常见的异常有以下几种:原创 2022-09-29 17:34:41 · 853 阅读 · 1 评论 -
面向对象编程之动态创建一个类
八股文如下:type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象。以下是 type() 方法的语法:type(object)type(name, bases, dict)参数 name -- 类的名称。 bases -- 基类的元组。 dict -- 字典,类内定义的命名空间变量。返回值一个参数返回对象类型, 三个参数,返回新的类型对象。直接上代码吧!!首先简单的进行以下总结!!①类是由type产生的,type是所有类的祖师爷!!②type方法可以动原创 2022-09-29 16:37:22 · 585 阅读 · 0 评论 -
RuntimeError: super(): __class__ cell not found 报错根本阐述
在这里我动态的创建了一个类,在类的继承时继承父类属性的时候,不停的报错!自定义函数,用最基本的方法进行super进行继承时,是不能够完全进行继承的!用简单的super().__init__(name,age)进行继承,因为是动态创建一个类,简单super方法根本无法找到父类和子类!光记一个简单的super调用方法!如果你想要得到质的升华!用该方法,进行调用时,就会完全消除错误,因为你手动的进行子类和父类的寻找就会完全的排除这种错误!所以我们不能只记住一个简单的super方法调用!错误就会完全的消除!原创 2022-09-29 16:31:03 · 1489 阅读 · 0 评论 -
面向对象编程:new方法实现单例模式
什么是设计模式?一共有23种设计模式!设计模式是针对软件开发中经常遇到的一些设计问题,根据基本的设计原则,总结出来的一套实用的解决方案或者设计思路。可以看到,设计模式是非常偏实际应用的,相比设计原则更加具体、可执行。因此,在了解设计模式之前,就需要了解一些基本的设计原则。这些原则才是指导我们写出好代码的关键。原创 2022-09-28 17:46:39 · 1142 阅读 · 3 评论 -
str 、repr 、del 面向对象编程之类的重点双下线方法
析构方法,当对象在内存中被是方法时,自动触发执行注:此方法一般无须定义,因为python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给python解释器来执行所以,原创 2022-09-28 16:15:08 · 134 阅读 · 0 评论 -
面向对象编程之类的简单双下划线方法
Foo(dic)实例化一个对象, dic.k1触发__getattr__()方法, val={'k2': 'v2'},当val值为一个字典对象时,if条件成立, 返回一个以val字典为参数的对象,就是说: dic.k1 == Foo({'k2': 'v2'}),这个对象可以继续通过点(.)调用对象的属性,如果有多层嵌套,一直循环下去。设置对象属性和删除对象属性会触发__setattr__ 和 __delattr__ 方法,但要注意的是,在调用这两个方法时,方法内部必须操作类的属性字典,否则会造成无限递归。原创 2022-09-27 19:05:25 · 728 阅读 · 39 评论 -
关于在相同或者不同python文件夹下利用反射
对 if 语句,该语句只会在该模块作为一个导入模块的时候发挥作用,就是说当别的python文件用import进行导入时,该If语句不会被执行,就可以发现该模块不是其本身模块,而是调用过来的模块!直接对__name__进行打印,我们看到的是代表模块本身__main__答:就是说该python文件就是模块本身。原创 2022-09-27 16:39:45 · 386 阅读 · 1 评论 -
面向对象编程之属性方法property
1、把一个方法变成一个静态的属性(变量)2、能够正常的访问类中的所有东西----例:类变量,实例变量等。原创 2022-09-26 19:03:15 · 2582 阅读 · 2 评论 -
面向对象核心编程之反射现象1
1.反射定义:反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!原创 2022-09-26 18:57:35 · 261 阅读 · 0 评论 -
面向对象编程之静态方法
静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。类的静态方法,静态变量是在类装载的时候装载的。但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。调用一个被定义为static的方法,可以通过在它前面加上这个类的名称,也可以像调用非静态方法一样通过类对象调用。非静态方法可以访问类的静态成员,也可以访问类的非静态成员;原创 2022-09-26 11:49:40 · 457 阅读 · 0 评论 -
面向对象编程之类方法@classmethod
但是这个代码有个bug!当你不创建对象,直接对在外部调用num时也可以使数量+1。答:因为这里对num+1是针对的每个新创建的实例对象,而不是针对于整个大类而言。最终的代码如下:有小伙伴们找到bug可以和我交流一下!你会发现类方法中的self指向的是类本身,而不是实例对象。类方法只能访问类变量,不能访问实例变量。通过@classmethod装饰器实现。为什么类方法中不能够访问实例变量?答:将Self换成类本身即可!答:可以使用类方法避免这个问题!原创 2022-09-25 19:04:50 · 895 阅读 · 2 评论 -
关于python中有关一个子类继承多个父类的实例属性绑定问题
当子类继承于多个父类时,super() 函数只可用于调用第一个父类的构造函数,其余父类的构造函数只能使用未绑定的方式调用。原创 2022-09-25 17:11:09 · 1668 阅读 · 0 评论 -
三大特性之类的多态2(抽象类如何进行和实现多态)
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类是一种特殊的类,它只能有抽象方法,不能被实例化,在子类继承抽象类时,不能通过实例化使用其抽象方法,必须实现该方法。从实现角度来看,抽象类与普通类的不同之处在于:抽象类中有抽象方法,该类不能被实例化,只能被继承,且实现子类必须继承并实现抽象类的方法。继承了抽象类,就必须重写抽象类中的抽象方法,否则无法实例化对象,并抛异常。原创 2022-09-24 18:31:58 · 610 阅读 · 2 评论 -
三大特性之类的多态1(普通函数如何进行多态)
变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。然而,习惯上并不将这种函数多态(function polymorphism)、宏多态(macro polymorphism)展现出来的行为称为多态(或静态多态),否则就连。谈及多态时,默认就是指动态多态,而静态多态则是指基于模板的多态。原创 2022-09-24 18:25:50 · 390 阅读 · 1 评论 -
面向对象的三大特性之类的封装
封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果不想被外界方法,我们大可不必提供方法给外界访问。对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。修改值干嘛的,都是要通过内部的方法去操作。原创 2022-09-24 16:25:09 · 106 阅读 · 0 评论 -
面向对象编程:类的多继承(单纯多继承和多重多继承)
【Python3唯一支持的算法,左图中MRO是MyClass→D→B→C→A→object】C3过于复杂,没必要去记,我们只要记住【object.mro(),显示继承的方法,从左到右依次查找】---当子类继承两个父类,同时两个父类有相同的方法时,不做任何修饰的情况下,子类调用方法时通常执行,先继承的父类。多继承可能会带来二义性,例如,猫和狗都继承自动物类,现在一个类多继承了猫和狗类,猫和狗都有了shout方法,子类究竟继承谁的shout尼?puthon3 中,无论是经典类,还是新式类,都是按广度优先查找。原创 2022-09-23 17:42:13 · 1406 阅读 · 1 评论 -
有关类继承中的各种易错点,和重写方法和属性的关键点
答:同样的在子类构造方法上面调用父类构造方法即可,Animal.__init__(self,name,age,sex)这里的self的传递流程是,键盘输入到子类当中 子类在传入子类的构造方法,在传入父类当中进行绑定!可以看到,子类对父类的eat方法进行重写时,调用了父类中的eat方法并将子类的self传进父类的eat方法当中,完成了绑定!注:无论子类怎么对父类的构造方法进行补充:都是先执行父类的构造方法之后,才能够执行子类的构造方法!答:执行完父类中的方法,在继续执行子类中的方法!我将主要代码挑出来!原创 2022-09-22 21:01:32 · 189 阅读 · 0 评论 -
面向对象编程:三大特性之继承
dog1 = {}else:假设在这里我创建了一个狗类的方法和一个人类的方法,所谓封装可以简单的理解为:狗类的方法人理论上是不运行人去调用的!多态和继承我会在后续代码中进行详细讲解!!原创 2022-09-22 18:13:54 · 408 阅读 · 0 评论 -
组合:对象之间的组合关系【python】
首先还是一如既往的八股文(其实看了你也不一定会敲代码,但是就是要看):类的组合其实描述的就是在一个类里内嵌了其他类的对象作为成员的情况,它们之间的关系是一种包含与被包含的关系。简单说,一 个类中有若干数据成员是其他类的对象。以前我们看到的类的数据成员都是基本数据类型的或自定义数据类型的,比如int、 float类型的或结构体类型的,现在我们知道了,数据成员也可以是类类型的。如果在一个类中内嵌了其他类的对象,那么创建这个类的对象时,其中的内嵌对象也会被自动创建。原创 2022-09-22 17:00:22 · 543 阅读 · 1 评论 -
关联:面向对象编程当中的关联关系【python】
类A关联类B的意思是,如果实例化一个A类的对象,同时会有一个B类的对象被实例化。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。简单点来说就是你的print(x)当中的x为空值,所以会返回一个none,注意有时候x是一个函数的时候已经函数x中的print已经输出完了,你又对x进行外面加一个print就经常会出现None。如果A类关联B类,那么创建A类的对象时实例化B类的对象,直到A类被销毁,所关联的B类对象也被销毁。A类关联B类,指的是B类对象作为A类的属性存在,称为"has-a"关联关系。原创 2022-09-21 21:51:00 · 1790 阅读 · 1 评论 -
依赖:类之间的依赖关系【python】
一般在构造函数中绑定另一个类的对象可以称之为依赖关系--只能够单向绑定,不能够双向绑定!也就是说只能够一个依赖另一个,不能够双向依赖。双向依赖一般都代表着 关联关系!UML图中实现使用一条带有。原创 2022-09-21 18:14:56 · 2314 阅读 · 1 评论 -
Python基础知识汇总
在 Python 里,标识符有字母、数字、下划线组成。在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。Python 中的标识符是区分大小写的。以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入;以双下划线开头的 __foo 代表类的私有成员;原创 2022-09-11 11:18:20 · 2565 阅读 · 1 评论