Python-小笔记-01

Python


简介

python 是一种广泛使用的高级编程语言,属于通用型编程语言。
拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且支持多种编程范式,
包括面向对象、面向切面、命令式、函数式和过程式编程。其本身拥有一个巨大而广泛的标准库。

特性和设计哲学

Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。
并且完全支持继承、重载、派生、多重继承,有益于增强源代码的复用性。
Python支持重载运算符,因此Python也支持泛型设计。

Python使用动态类型(值而非变量携带类型),以及引用计数和循环检测垃圾收集器的组合,
用于内存管理。它还具有动态名称解析(后期绑定),它在程序执行期间绑定方法和变量名称。

Python的设计为Lisp传统中的函数式编程提供了一些支持。
它有,和功能; 列表理解,词典和集合; 和生成器表达式。

格言:

美丽胜过丑陋
显式优于隐式
简洁胜于复杂
复杂胜于凌乱
间隔胜于紧凑
可读性很重要


OO

关于类和对象

一切都是对象
  类是具有相同属性和行为的对象的集合,对象是类的一个具体实例。
在Python中可以表现为
1. 都可以被引用
2. 都可以当做函数的参数传入
3. 都可以当做函数的返回值
4. 都可以作为容器类的元素

类亦为对象
  这个对象(类)自身拥有创建对象(类实例)的能力,它创建的对象(类实例)将作为其本身属性和行为的一个具体的展现, 而这就是为什么它是一个类的原因,因为它的具体展现可以有任意多个。我们可以将该对象称为类,它符合了关于类的描述。

元类 metaclass
  由上一点可知类的本质也是一个对象 — 类对象,我们将创建类对象的类 — 称为元类。
在Python中内置的元类是 type, 它是创建所有类的基础 (包括整数、字符串、函数和类,也包括了用户自定义的元类)。


对象的创建

普通对象的创建
  在python中,调用一个类去实例化对象的时候,会先调用这个类(A)的元类的__call__方法,在元类的__call__方法中,会先调用类(A)的__new__方法创建空对象,然后用类(A)的__init__方法初始化这个空对象, 最后元类的__call__的方法将初始化后的对象返回。

  • __new__是一个类方法, 负责创建一个对象。如果__new__方法没有返回实例(一般如此),
    那么它就不会自动的去调用__init__方法
  • __init__方法负责在__new__方法创建出一个实例后对实例属性进行初始化。
    __init__方法可以没有返回值。

类对象的创建
基本流程同第一点,需要注意的是:
  当调用的对象是元类的时候(即你想生成一个类),在用__init__函数初始化的时候,空对象作为__init__函数的第一个参数传入,[类名,基类,名称空间]作为必须的后三个参数传入__init__函数,最后元类的__call__的方法将初始化后的对象返回,即你创建了一个类。

metaclass 属性
就定义了类的元类,Python会通过__metaclass__去创建类的对象, type类没有该属性
  查找顺序:
    本类 --> 父类 --> 模块 --> type
    
  __metaclass__实际上可以被任意调用,所以它并不一定需要是一个正式的类。可以是一个函数,只要他它能返回类的对象。

自定义类的实例化
   __new__方法可以让你控制类的创建过程,依照Python官方文档的说法,
   __new__方法主要是当你继承一些不可变的class时 (比如int, str, tuple),
  提供给你一个自定义这些类的实例化过程的途径。
例如:

		class Singleton(object):
		    def __new__(cls, *args, **kwargs):
		        if not hasattr(cls, "_instance"):
		            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
		        return cls._instance

		s1 = Singleton()
		s2 = Singleton()		

		print(s1 is s2) # true


转载请声明


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值