python一切皆对象

  Python中一切皆对象,在静态语言中,Java也是面向对象编程,Python要比Java的面向对象编程更加彻底。元类编程以及猴子补丁都是用一切皆对象编程出来的。

1、函数和类也是对象,是Python的一等公民

1.1、赋值给一个变量

对函数操作:

def ask(name=""):
print(name) my_func = ask #函数对象赋值给变量,然后我们对变量的操作就是对函数的操作
my_func("lishuntao")

对类操作:

class Person:
def __init__(self):
print("lishuntao") my_class = Person #类对象赋值给变量,然后我们对变量的操作就是对类的操作
my_class()

1.2、可以添加到集合对象中

def ask(name="lishuntao"):
print(name) class Person:
def __init__(self):
print("lishuntao001") obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for obj in obj_list:
print(obj())

结果反映出了,可以将对象添加到集合中。

1.3、可以作为参数传递给函数

def ask(name="lishuntao"):
print(name) def print_type(item):
print(type(item)) print(print_type(ask))

1.4、当做函数的返回值

def ask(name="lishuntao"):
print(name) def decorator_func():
print("start")
return ask my_func = decorator_func()
my_func("Intersting")

  可以看见,将decorator_func函数赋值给my_func变量,由于decorator_func函数的返回值是一个函数,将返回值返回给my_func,直接可以调用my_func可以实现ask函数功能,一个函数里面是可以实现另一个函数的。这样的操作实际上就是Python中的装饰器实现的原理。

2、type、object和class之间的关系

a = 11
b = "abc"
c = [1,2]
d = {"a":2}
class Students():
pass class MyStudents(Students):
pass stu = Students()
print(type(d)) # <class 'dict'>
print(type(dict)) # <class 'type'>
# **:type==>list==>c
print(type(a)) #<class 'int'> **:type==>dict==>d
print(type(int)) #<class 'type'> **:type==>int==>a
print(type(b)) #<class 'str'> **:type==>str==>b
print(type(str)) #<class 'type'> **:type==>Students==>object
print(type(stu)) #<class '__main__.Students'> **:type==>type==>MyStudents==>Students==>object
print(type(Students)) #<class 'type'> **:type类的基类是object,object的基类是空,object的类型是type类,由此可以总结出他们之间的关系
print(int.__bases__) #(<class 'object'>,)
print(str.__bases__) #(<class 'object'>,)
print(Students.__bases__) #(<class 'object'>,)
print(MyStudents.__bases__)#(<class '__main__.Students'>,)
print(type.__bases__)#(<class 'object'>,)
print(object.__bases__)#()
print(type(object))#<class 'type'>

3、Python中常见内置类型

3.1、对象的三个特征

  身份:什么是身份呢?可以理解成对象在内存中的地址。(可以用id函数来查看对象的地址)

  类型:对象都是有类型的。(例如:int型,str型)

  

3.2、类型:Python中有哪些类型

3.2.1、None类型(全局只有一个):

  Python解释器运行的时候,Python会用None这个类型声明一个None的对象。(例如:变量a、b都被赋值一个None对象,然后会发现变量都指向一个None对象(地址可以看出,例如下图))

 3.2.2、数值类型:

  int类型、float类型、complex(复数)类型、bool类型

3.2.3、迭代类型:

  迭代类型用for循环进行遍历。(在后边的迭代器和生成器学习会介绍)

3.2.4、序列类型:

  常见的有list、tuple、str、array、range、bytes,bytearray,memoryview(二进制序列)等。

3.2.5、映射类型(dict):

  常用的字典,是一个映射类型。映射类型就是有keymap的。

3.2.6、集合:

  set、frozenset(不可以修改的set

3.2.7、上下文管理类型(with)

  with语句

3.2.8其他类型:

  模块类型(from,import)、class和实例、函数类型、方法类型(方法和函数是有区别的。方法是类中的函数)、代码类型(代码本身也会被Python解释器变为一个对象类型)、object对象、type类型、ellipsis类型(省略号类型)、notimplemented类型

01-python中一切皆对象的更多相关文章

  1. 【Python核心编程笔记】一、Python中一切皆对象

    Python中一切皆对象 本章节首先对比静态语言以及动态语言,然后介绍 python 中最底层也是面向对象最重要的几个概念-object.type和class之间的关系,以此来引出在python如何做 ...

  2. python中一切皆对象的理解

    一切皆对象? 学过Java都知道,Java中有8个基本类型,其余的都是继承自Object类的引用类型.方法内的基本类型变量会在栈上分配,而引用类型会通过逃逸分析来决定在栈上分配或堆上分配.Java中关 ...

  3. gj2 python中一切皆对象

    2.1 python中一切皆是对象 动态语言和静态语言的区别,Python的面向对象更彻底 同时动态语言,代码的灵活性高 没有编译(检查)的过程,错误只有在运行起来后才会发现 函数和类也是对象,属于p ...

  4. 第一篇 Python中一切皆对象

  5. 关于python中一切皆对象和深浅拷贝

  6. python:一切皆对象

      学过java语言的童鞋都知道,java是一门面向对象语言,其基本思想就是一切皆对象.Python也是一样的,甚至Python将面向对象思想贯彻地更加彻底,因为在Python中,class本身是一个 ...

  7. Python中通过函数对象创建全局变量

    先看下面这段代码,显然无法work. 因为代码试图在TestVariableScope()中引用一个没有被定义的变量a.所以必须报错,如下图-1. 不过如果你将第2行代码注释掉.代码就能跑通了,如图- ...

  8. 全面了解python中的类,对象,方法,属性

    全面了解python中的类,对象,方法,属性 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... 我们通过描述属性( ...

  9. Python中的函数对象与闭包

    函数在Python中是第一类对象,可以当做参数传递给其他函数,放在数据结构中,以及作为函数的返回结果. 下面的例子为接受另外一个函数作为输入并调用它 #foo.py def callf(func): ...

随机推荐

  1. 小白学微信小程序

    奔着实用性的目的-测试孩子的认字量,开发了一个微信小程序-测字大王.上下班路上看书看了一个星期,代码前后共写一个星期.现在小程序已经对外开放,share下我的开发过程吧. 一 工具准备 首先先过一篇 ...

  2. Prism - MVVM模式下,StackPanel中增加和删除View(UserControl)

    一.现实效果 在学习Prim,看官方的例子 03-CustomRegions 只是一个简单演示,这里用MVVM方式做个了相对完整的例子,实现效果如图: 点击Add,右侧StackPanel中增加一个V ...

  3. Excel在线预览(通过poi转html,含里面的图片)

    支持03和07excel转html,直接上代码 测试类 /** * 主方法 * @author asus * */ public class App2 { public static void mai ...

  4. vue+uwsgi+nginx部署luffty项目

    在部署项目之前本人已经将前端代码和后端代码发布在了一个网站上,大家可自行下载,当然如果有Xftp工具也可以直接从本地导入. django代码 https://files.cnblogs.com/fil ...

  5. H5 + WebGL 实现的地铁站 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  6. C++学习笔记4_new和delete

    1. 默认的new和delete操作符new和delete是和c里面的mlloc和free是一样的,在堆中创建空间.堆中创建的,都要自己释放.C中void test(){ int *p=(int *) ...

  7. 查找一个卷对应的osd

    1.首先找到卷的id: 2.使用rados命令找到卷上面的对象数据: 3.通过ceph osd map命令可以查询到对象对应的pgid及pg对应的osd:

  8. CSPS模拟 59

    经ooo提醒咕题解会掉rp 我反正也冒着改不完题的风险,就开始颓博了 话说好久没这么舒坦的垫过底了233 上来一看T1,立刻就转化题意为有奇偶性和距离限制的bfs 然后就没考虑子串不能越过母串边界的事 ...

  9. NOIP模拟 16

    嗯我已经是个不折不扣的大辣鸡了 上次的T3就弃了,这次又弃 颓废到天际 T1 巨贪贪心算法 我就是一个只会背板子的大辣鸡 全裸的贪心看不出来,只会打板子 打板子,加特判,然后一无进展,原题不会,这就是 ...

  10. Redis性能解析--Redis为什么那么快?

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! Red ...