粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了.

1.面向对象的特性

 #你写代码时什么使用面向对象
#处理比较复杂的角色之间的关系
#例如QQ好友和陌生人,淘宝卖家买家商品,公司学校的人事管理
#代码的清晰度更高,无论是开发者调用者都能明确分辨自己的方法
#代码有可拓展性,可读性,复用性

2.关于类

#类型和类的关系
#类型和自定义类的关系,类型和类是一个东西
#type(obj) obj是一个对象,他的type就是类型 #怎么创建一个类
#class 类名 语法级别的python解释器读到这句话时
#类也是被创建出来的,type创建类,type(cls)=type
#type(obj)的结果就是这个对象所属的类
#type(类)的结果就是创建这个类的元类,大多数情况下就是type除非你指定metaclass #类:直接加载进去了,不像函数调用才加载
#静态属性/字段/变量
#动态属性/方法

3.关于对象

#python一切皆对象
#基础数据类型都是对象 #怎么创建一个对象
#类名() 实例化
#__new__()创造一个对象的空间,一些简单的初始化 #对象
#可以通过指针找到类的空间中的内容
#对象本身储存了一些只属于对象的属性
#类创建对象的过程就是实例化的过程

3.组合和继承

#组合: 什么有什么的关系
#一个对象作为另一个对象的属性 #继承:什么是什么的关系
#单继承/多继承
#单继承:如果子类的对象调用某个方法,子类有调子类,子类没有找父类,一直找,到object为止然后报错
#子类有还想调父类:
#super(子类,self).方法名(除了self以外的参数)
#父类名:父类名.方法名(self)
#在任何类中调用的方法,都要自行分辩一些self是谁的对象?
#多继承:新式类默认继承object,py3都是新式类.经典类不继承object
#经典类,新式类
#新式:广度优先,c3算法
#mro方法看继承顺序
#super().func()类的内部不用传子类名和self
#经典:深度优先
#没有mro
#super(子类名,self).func()必须传子类名和Self
#子类和父类:节省代码 #抽象类和接口类
#不能被实例化
#规范子类当中必须实现某个方法
#有原生实现抽象类的方法,但没有原生实现接口类的方法
#java只支持单继承 父类的方法可以实现
#java里,接口interface是支持多继承的规范,接口里的所有方法只能写pass
#也就是说抽象类就是单继承,接口类是多继承,这主要出现在java里

4.多态鸭子类型

#鸭子类型:
#例如有序列index特点的类,那么说这些类都是鸭子类型
#多态:处处是多态
#一种类型的多种形态 多个子类去继承父类,那么每个子类都是这个父类的一种形态
#java
# def func(int arg1,str arg2)#对于java来说,传入对象需要有类型
#如果不知道传什么类,可以创建一个共同的父类,把父类传进来.这就是java里多态的应用
#python
#因为所有的对象的类都有object类,可以说object类是所有的父类,所以说py里处处是多态

5.封装

#封装
#广义的封装:把方法属性封装在一个类里,定义一个规范来描述一类事物
#狭义的封装:私有化 只能在类的内部访问
#__静态变量,私有方法,私有对象属性,私有类方法,私有静态方法
#内存中存储__类名__名字
#为什么在类的内部可以使用双下划线访问?在类的内部使用,你就知道在哪个类中
#在子类中可以访问父类的私有变量吗?不行!不能被继承

6.装饰器函数property

#装饰器函数之property
#他是内置函数,能帮你将类中的方法伪装成属性,特性!
# 调用方法的时候不需要主动加括号,让程序的逻辑性更合理
#@方法名.setter 装饰器,修改被property装饰的属性的时候会调用被这个装饰器装饰的方法,除了self参数外还有一个值是修改的参数
#@方法名.deleter装饰器,当要删除被property装饰的属性的时候会调用被这个装饰器装饰的方法
#一个计算圆的例子 class Circle:
def __init__(self,r):
self.r=r
@property
def area(self):#这个方法计算结果本身就是一个属性,但这个属性会随着类/对象的基本变化而变化
return 3.14*self.r**2
c=Circle(5)
print(c.area)

装饰器classmethod和装饰器staticmethod

#类方法的装饰器,也是内置函数  classmethod
#不用对象命名空间的内容,而用到了类命名空间的变量(静态属性),或类方法类属性
#使用类名调用,默认传类名做第一个参数
#staticmethod静态方法的装饰器 内置函数
#如果一个类的方法,既不需要用到self里的资源,也不用cls资源,相当于一个普通函数.但基于某个原因,仍要把方法放到类里,这时就需要将方法变成静态方法
#你完全想用面向对象编程,所有的函数都必须写到类里
#某个功能确确实实是这个类的方法,确确实实没有用到与这个类有关的资源
#例如学生和管理员都需要登陆,又不想占用学生和管理员的资源
class Person:
@staticmethod
def login():
pass
class Student(Person):pass
class Manager(Person):pass

7.反射

#反射:从某个指定的命名空间里,用字符串数据类型的变量名来获取变量的值
#类名反射 静态属性 类方法 静态方法
#对象方式 对象属性 方法
#模块 模块中的方法
#自己模块的反射,例如(此处不完整,需要等到模块部分的补充)
import sys
mymodoule=sys.modules['__main__']
getattr(mymodoule,'变量名')
#hasattr/getattr/setattr/delattr
#参数
#(命名空间,'变量名')
#setattr(命名空间,'变量名'新的值)
#变量名 你只能拿到一个字符串的版本
#从文件里拿
#交互拿:input/网络传输

8.双下方法

#内置方法/魔术方法/双下方法
#__名字__ 不能直接调用
#通过内置函数/面向对象中的特殊语法/python提供的语法糖调用
#简化了语法的语法操作就是语法糖
#__call__ 在类写装饰器时必须用
#__new__ 在实例化过程中,最先执行的方法,在init之前,创造对象.使用new可以创建单例类
#__init__在实例化中,new执行之后
#__len__要求obj必须实现__len__方法,要求这个方法的返回值必须是int
#__str__要求必须实现了__str__,要求这个方法返回值必须是str
#双下repr方法:是__str__的备胎,如果有str就会先执行str,并且使用str返回值.如果没有__str__,那么所有的这些都会执行__repr__
# 对应repr(obj),%r.
class A:
def __init__(self,name):
self.name=name
def __repr__(self):
return self.name
def __str__(self):
return '**%s**self.name'
a=A('Alex')
print(a)
print(str(a),repr(a))

9.析构方法

#析构方法:释放空间
class File():
def __init__(self,file_path):
self.f=open(file_path)
def read(self):
self.f.read(1024)
def __del__(self):
self.f.close()#析构方法,释放创建对象时的一些资源
f=File('文件名')
f.read() #python内部的指令可以被垃圾回收机制执行,但有些情况不行,所以得手动
#close可以理解是关闭python,而del是释放操作系统资源.因为py没权力管系统
#不管主动被动,这个f总被清掉,被清掉就触发__del__,触发就会归还操作系统资源
#这里代码让其先手动触发del,在自动执行垃圾回收,是防止垃圾回收不完全导致有资源没有被清理,容易出错
#某对象借用操作系统资源,还要通过析构方法归还回去.包括文件资源,网络资源
#with close比open close要不稳定,with不能100%处理异常

python面向对象学习笔记(一)的更多相关文章

  1. 【原】Learning Spark (Python版) 学习笔记(三)----工作原理、调优与Spark SQL

    周末的任务是更新Learning Spark系列第三篇,以为自己写不完了,但为了改正拖延症,还是得完成给自己定的任务啊 = =.这三章主要讲Spark的运行过程(本地+集群),性能调优以及Spark ...

  2. Python Click 学习笔记(转)

    原文链接:Python Click 学习笔记 Click 是 Flask 的团队 pallets 开发的优秀开源项目,它为命令行工具的开发封装了大量方法,使开发者只需要专注于功能实现.恰好我最近在开发 ...

  3. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  4. Python Flask学习笔记之模板

    Python Flask学习笔记之模板 Jinja2模板引擎 默认情况下,Flask在程序文件夹中的templates子文件夹中寻找模板.Flask提供的render_template函数把Jinja ...

  5. Python Flask学习笔记之Hello World

    Python Flask学习笔记之Hello World 安装virtualenv,配置Flask开发环境 virtualenv 虚拟环境是Python解释器的一个私有副本,在这个环境中可以安装私有包 ...

  6. 获取字段唯一值工具- -ArcPy和Python案例学习笔记

    获取字段唯一值工具- -ArcPy和Python案例学习笔记   目的:获取某一字段的唯一值,可以作为工具使用,也可以作为函数调用 联系方式:谢老师,135-4855-4328,xiexiaokui# ...

  7. Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)

    程序设计的三种基本结构: 面向对象,面向过程,函数式编程   1,什么是面向对象编程    面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就 ...

  8. Python高级学习笔记

    Python高级学习笔记,此笔记中包含Linux操作系统.Html+CSS+JS.网络协议等. 所有思维导图为本人亲手所画,请勿用于商用. 大哥们,求点赞哦. 第一天笔记:链接 第二天笔记:链接 第三 ...

  9. PHP:面向对象学习笔记,重点模拟Mixin(掺入)

    背景 相对于Python.Node和Ruby来说PHP算是一门容易学习和使用的语言,因为这个特点也使其成为WEB开发领域的佼佼者,本文记录一下我对PHP面向对象部分的学习笔记. 先来一个复杂的例子:M ...

随机推荐

  1. 2-set 1823: [JSOI2010]满汉全席

    这个题告诉我变量循环使用,一定要赋好初值!!!!!! 一定要赋好初值!!!!!!一定要赋好初值!!!!!!一定要赋好初值!!!!!! #include<iostream>#include& ...

  2. break,continue,return的区别 x

    这三个东西特别坑,一定要记准了!! 1)break     直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试.他只能跳出一层循环: 注意:如果你的循环是嵌套循环,那么 ...

  3. NodeJS后台

    NodeJS后台 后台: 1.PHP 2.Java 3.Python 优势 1.性能 2.跟前台JS配合方便 3.NodeJS便于前端学习 https://nodejs.org/en/ 1.切换盘符 ...

  4. Java 单例设计模式之 饿汉式和懒汉式

    public class InstanceSampleTest { public static void main(String[] args) { /** 单例设计模式的 饿汉式和懒汉式 * 单例模 ...

  5. avalon.js中使用owl-carousel轮播图

      <?php if($banners){?> <div class="ms-controller" ms-controller="bannerShow ...

  6. Go by Example-图解数组

    基本概念 1.数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2.在 Go 中因为数组的内存布局是连续的,所以可以通过索引(位置 ...

  7. 使用WebSocket实现服务端和客户端的通信

    开发中经常会有这样的使用场景.如某个用户在一个数据上做了xx操作, 与该数据相关的用户在线上的话,需要实时接收到一条信息. 这种可以使用WebSocket来实现. 另外,对于消息,可以定义一个类进行固 ...

  8. docker pull 失败: server misbehaving

    在docker pull 镜像时一直报错: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lo ...

  9. NLP 文本预处理

    1.不同类别文本量统计,类别不平衡差异 2.文本长度统计 3.文本处理,比如文本语料中简体与繁体共存,这会加大模型的学习难度.因此,他们对数据进行繁体转简体的处理. 同时,过滤掉了对分类没有任何作用的 ...

  10. Docs-.NET-C#-指南-语言参考-预处理器指令:#warning(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#warning(C# 参考) 1.返回顶部 1. #warning(C# 参考) 2015/07/20 #warning 允许 ...