总的来说,Java和Python各自都是一门纯面向对象语言,但是Python要比Java的面向对象更加彻底,这也直接导致Python具有很强的灵活性
在Python中,函数和类也是对象(第三章会重点讲解),是Pthon的“一等公民”,具体表现为
例如
def test(x=1):
return x**2
class Test:
def __init__(self):
print("Class is being instantiated")
# 可以赋值给一个变量
my_func = test
my_class = Test
print(my_func(10))
my_class()
print("-"*20)
# 可以添加到集合对象中
list1 = [test, Test]
for i in list1:
print(i())
print("-"*20)
# 可以作为函数的返回值
def decorator_test():
print("decorator_test running now!")
return test # 注意这里不要写test()等形式,因为这样不是返回对象地址,而是调用
my_test = decorator_test()
print(my_test(2))
print("-"*20)

在Python中,type()函数的使用此时也是比较多的,主要用它来判断一个对象的类型,如下
class Student:
pass
a = [1, 2, 3]
b ={'2': "sad", 'c': a, 'b': 123}
student = Student()
print(type(1))
print(type("test"))
print(type(a))
print(type(b))
print(type(student))

上面我们说过,Python中一切皆对象。这意味着类也是对象,当然这听起来有些怪怪的,但事实确实如此。Python中的int、str、dict等都是对象,甚至你所常见的Student类也是对象,他们本质都是type类实例化后的对象,这个type我们称其为元类
如下是Python中关于type类的定义

即然type是一个类,那么如type(int)、type(list)等操作其实就是在创建类
type 类的实例。在 Python世界中,type 这个类就是造物的上帝type 类的__call__运算符重载class Student:
pass
print(type(list))
print(type(int))
print(type(set))
print(type(Student))

和Java一样,在Python中,object类是所有类的基类,其他所有类都继承自基类 不过需要注意:
type也是类,所以 type的基类也是objectobject是基类,但是在Python类也是对象,所以 object也是type类型print(int.__base__) # 查看基类
print(object.__base__)
print(type.__base__)
print(type(object))

object和class的关系是非常容易理解的,这里面最难理解的就是type和object的关系,而且这涉及了后续元编程相关内容
type是所有对象(甚至是自己)的“造物主”
一个对象具有如下三个特征
id(object)获取int、str、dict等①:None:Python解释器启动时会自动生成一个None对象,全局只有一个
a和b被赋值为了None,由于None全局只有一个,所以a和b的地址是相同的a = None
b = None
if id(a) == id(b):
print("a和b地址相同")
else:
print("a和b地址不相同")

②:数值类型:
intfloatcomplexbool③:迭代类型:
④:序列类型:
listbytes、bytearray、memoryviewrangetuplestrarray⑤:映射(dict):
⑥:集合:
setfrozenset⑦:上下文管理类型(with):
⑧:其他:
class和实例object对象type类型ellipsis类型notimplemented类对象