python继承

Python里面这些点,据说80%的新手都会一脸懵逼

可紊 提交于 2020-03-26 11:10:06
Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来说说这几个点,反正我学的时候是很困惑的! 01.函数里面的 *args 1).可变参数 这个是什么鬼,尤其是有其他c,c++语言基础的人,看到这个点,一定懵逼了,难道是指针,两个**又是什么鬼? 其实这个Python里面的函数入参的几种形式,假如你来设计一个语言,一个函数fun(),里面要传参数进来,要考虑扩展性:变量会有很多种形态,有可能是变量,也可能是数组,也可能是结构体,或者是哈希数组。 比如你有一个累加功能的函数: 每次调用函数都要传一个列表或者元组进去,非常死板,不灵活,如果我要传多个列表,多个变量,我又不想改接口,但是改成下面这样就灵活很多: 在这里顺便说下不管你是为了Python就业还是兴趣爱好,记住:项目经验永远是核心,如果你缺新项目练习,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新教程项目,还可以跟老司机交流讨教! *args:表示可变参数,就是传入的参数个数是可变的,可以是1个、2个到任意个或者0个,其实就是把一堆参数当作一个数组(Python列表或者元组传递进来)。 02.关键字参数 **kwargs 关键字参数可以让你输入0或者多个含参数名的参数,并且自动组装为一个字典

Python面向对象(类之间的关系)(三)

落花浮王杯 提交于 2020-03-24 19:44:44
类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的. 随时可以更换另外一个东西来完成此操作 class Plant: def __init__(self,zhonglei,xue,gongjili): self.zhonglei = zhonglei self.xue = xue self.gongjili = gongjili def da(self,js): print("植物打僵尸") js.xue -= self.gongjili if js.xue <= 0: print("僵尸死亡") else: print(f"僵尸掉血{self.gongjili},僵尸还剩{js.xue}血") class Jiang: def __init__(self,zhonglei,xue,gongjili): self.zhonglei = zhonglei self.xue = xue self.gongjili = gongjili def chi(self,zw): print("僵尸咬植物") zw.xue -= self.gongjili if zw.xue <= 0: print("植物死亡") else: print(f

20 Python 之类之间的关系

浪尽此生 提交于 2020-03-24 19:32:14
类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的. 随时可以更换另外一个东西来完成此操作 class Plant: def __init__(self,zhonglei,xue,gongjili): self.zhonglei = zhonglei self.xue = xue self.gongjili = gongjili def da(self,js): print("植物打僵尸") js.xue -= self.gongjili if js.xue <= 0: print("僵尸死亡") else: print(f"僵尸掉血{self.gongjili},僵尸还剩{js.xue}血") class Jiang: def __init__(self,zhonglei,xue,gongjili): self.zhonglei = zhonglei self.xue = xue self.gongjili = gongjili def chi(self,zw): print("僵尸咬植物") zw.xue -= self.gongjili if zw.xue <= 0: print("植物死亡") else: print(f

python(七):元类与抽象基类

你。 提交于 2020-03-24 19:06:44
一、实例创建   在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的。python3默认创建的类是继承了object。 class A(object): def __init__(self, *args, **kwargs): self.name, self.age, self.gender = args[:3] def __new__(cls, *args, **kwargs): print("__new__ has called.") return super(A, cls).__new__(cls) # 可写为 super().__new__(cls) 或 object.__new__(cls) a = A("Li", 27, "male") print(a.name, a.age, a.gender) """ __new__ has called. Li 27 male """ 二、类的创建   以class关键字开头的上下文在定义时就已经被解释执行。而函数(包括匿名函数)在没被调用时是不执行的。这个过程本质上做了一件事情:从元类type那里创建了一个名为A的类,开辟类内存空间,并读取class语句的上下文,将类属性和方法写进去。 print("--解释器开始执行--") def func(): print(

Python开发【第六章】:面向对象

扶醉桌前 提交于 2020-03-23 18:53:25
编程范式   编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式。 两种最重要的编程范式分别是面向过程编程和面向对象编程 面向过程编程   面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。 程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。 这样做的问题也是显而易见的,就是如果你要对程序进行修改,对你修改的那部分有依赖的各个部分你都也要跟着修改, 随着程序越来越大, 这种编程方式的维护难度会越来越高。 所以我们一般认为, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护的

Python基础第20天

点点圈 提交于 2020-03-23 06:04:00
面向对象进阶 一: isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo: pass f1=Foo() print(isinstance(f1,Foo)) 2. issubclass(sub, super)检查sub类是否是 super 类的派生类 class Foo: pass f1=Foo() print(isinstance(f1,Foo)) class Bar(Foo): pass b1=Bar() print(issubclass(Bar,Foo)) print(isinstance(b1,Foo)) print(type(b1)) #<class '__main__.Bar'> 二:getattribute class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是getattr') def __getattribute__(self, item): print('执行的是getattribute') raise AttributeError('抛出异常了') f1=Foo(10) f1.xxxxx f1.x

Python学习记录

爷,独闯天下 提交于 2020-03-21 16:47:37
Python学习记录Day1 1.什么是Python? Python的本意其实蟒蛇,由于其创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)喜欢一部电视喜剧《Monty Python's Flying Circus》,故将其命名为Python。而Python的诞生(Python解释器原型)则是因为1989年圣诞期间,Guido为了打发圣诞节的无趣,就决心开发一个新的脚本解释程序,作为ABC语言的一种继承。1991年,第一个Python解释器诞生,它是用C语言实现的,并且能调用C语言的库文件。 1.1什么是解释器? 计算机是不能理解除机器语言之外的任何语言的,所以必须把程序员所写的程序语言翻译为计算机能看懂的机器语言,计算机才能执行程序,将其他语言翻译成机器语言的工具,成为编译器。编译器的翻译方式分为两种:一种为编译,一种为解释。两者翻译的区别在于运行的时间点的不同。当编译器以解释方式运行是,称为解释器。 ●编译型语言:程序在执行之前需要一一个专]的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++ ●解释型语言:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行

python全栈开发day19-面向对象初识

坚强是说给别人听的谎言 提交于 2020-03-21 15:36:22
1.昨日内容回顾   模块: 1.什么是模块,什么是包     py文件就是模块,包是包含一系列py文件(__init__.py)的文件夹。    2.模块的导入相当于相当于执行了导入的模块,首次导入模块,会生成pyc编译文件,模块源文件变动pyc编译文件均能感知到; 编译文件能加快文件的加载效率,不能加快代码的执行效率。 3、sys.path 默认会添加一个当前执行文件所在的目录 4、模块不会重复导入,不能循环引用。 5、导入模块的方法:       #from 。。。import #import 只有import后面的名字会出现在全局命名空间中。 6.模块的属性__name__,       #直接执行一个文件时,这个文件的变量名__name__,都是字符串‘__main__’       #引用一个模块,这个模块的__name__值为模块名    7.导入模块的顺序     # 先写内置模块# 扩展模块# 自定义模块 包     从包中导入模块:     import 精准导入到模块     from import至少导入到模块 #导入包相当于执行这个包下的__init__.py文件。 如果导入包后使用里边的模块的内退,那就要在__init__.py文件做以下操作 绝对导入:如果导入的包和执行文件的相对位置改变了,绝对导入路径会失败。 相对导入:用到了相对导入的文件

[Python] 多线程相关

落花浮王杯 提交于 2020-03-21 09:48:33
3 月,跳不动了?>>> 1 相关基础 Python3 线程中常用的两个模块为: _thread threading(推荐使用) thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用"thread" 模块。为了兼容性,Python3 将 thread 重命名为 "_thread"。 1.1 _thread 模块函数式调用 _thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。 函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下: _thread.start_new_thread ( function, args[, kwargs] ) 参数说明: function - 线程函数。 args - 传递给线程函数的参数,他必须是个tuple类型。 kwargs - 可选参数。 1.2 threading 模块对象式调用 threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法。 除了使用函数外,线程模块同样可以通过直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程。 import threading import time

VS调用python方法

佐手、 提交于 2020-03-21 07:33:21
1、 安装python3.7 2、 Vs2010中配置python: 3、添加头文件:#include <Python.h> 4、问题:error LNK2001: 无法解析的外部符号 __imp__Py_Initialize@0 原因: 由于Python版本和项目编译版本不匹配导致这个问题,本文出错的原因是 解决: 1. 使用 Python x86版本,VS项目更改为Win32,包含目录及库目录一律为Python x86,可正常编译 2. 使用 Python x64版本,通过配置管理器,在活动解决方案平台中新建X64平台,包含目录及库目录一律为Python x64,可正常编译 5、问题:error MSB6006:"CL.exe"已退出,代码为5 解决:在更改VC++目录时,改每个目录要注意把下面的“从父级或项目默认设置继承”勾选上。 VS调用python常用接口: void Py_Initialize(void) 初始化Python解释器,如果初始化失败,继续下面的调用会出现各种错误,可惜的是此函数没有返回值来判断是否初始化成功,如果失败会导致致命错误。 int Py_IsInitialized(void) 检查是否已经进行了初始化,如果返回0,表示没有进行过初始化。 void Py_Finalize() 反初始化Python解释器,包括子解释器