惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
Arctic Wolf
博客园 - 聂微东
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
小众软件
小众软件
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Cloudflare Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
L
LangChain Blog
A
About on SuperTechFans
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
T
The Blog of Author Tim Ferriss
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
Know Your Adversary
Know Your Adversary
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Palo Alto Networks Blog
Scott Helme
Scott Helme
S
Secure Thoughts
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
P
Privacy & Cybersecurity Law Blog
O
OpenAI News
H
Heimdal Security Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Help Net Security
Help Net Security
C
Cyber Attacks, Cyber Crime and Cyber Security
Blog — PlanetScale
Blog — PlanetScale
GbyAI
GbyAI
G
Google Developers Blog
博客园 - Franky
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
Kaspersky official blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Tor Project blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tenable Blog
Google Online Security Blog
Google Online Security Blog
PCI Perspectives
PCI Perspectives

博客园 - tsembrace

Pandas数据分析教程,由浅入深讲解(五)Pandas IO操作 Pandas数据分析教程,由浅入深讲解(四) Pandas数据分析教程,由浅入深讲解(三) Pandas数据分析教程,由浅入深讲解(二) Pandas数据分析教程,由浅入深讲解(一) B站黑马Python+AI零基础入门(二)AI应用-实战 B站黑马Python+AI零基础入门(一)AI应用-基础 B站清华128小时Python高级教程一(C3深入类和对象) B站python入门学习---第二阶段第二章数据库、SQL和MySQL B站python入门学习---第二阶段第一章类和对象 B站python入门学习---第一阶段第十章 数据可视化 B站python入门学习---第一阶段第八~九章 文件操作、异常、模块与包 B站python入门学习---第一阶段前七章回顾复习(二) B站python入门学习---第一阶段前七章回顾复习(一) Python入门学习(十)第十四章其他 Python入门学习(九)Python的高级语法与用法(四)装饰器 Python入门学习(九)Python的高级语法与用法(三)函数式编程 Python入门学习(九)Python的高级语法与用法(二)闭包 Python入门学习(九)Python的高级语法与用法(一)枚举 Python入门学习(八)JSON、反序列化、序列化 Python入门学习(七)高级部分:正则表达式(二) Python入门学习(七)高级部分:正则表达式 Python入门学习(六)高级部分:面向对象 Python入门学习(五)函数 Python入门学习(四)流程控制 包与模块
B站清华128小时Python高级教程一(C1、C2)
tsembrace · 2026-01-06 · via 博客园 - tsembrace

Chapter1 python中一切皆对象

*python中的对象

1、对象具有3个基本特征:1、本征值(身份,identity),可以使用id()方法返回;2、型式(类型,type),可以使用type()获取;3、值(value)。

2、python中的“一切皆对象”对比其他面向对象编程语言更为彻底,其变量、函数、类等也均为对象;

且有四个特点:(1)任意对象(包括函数和类)可以赋值给一个变量;(2)任意对象(包括函数和类)可以传递到集合对象中;

如下代码即说明上述(1)(2)特点

def print_name(name = "Tony"):
    print(name)

my_func = print_name     #将函数名赋值给变量
my_func()
my_func('大海')

class Person:
    def __init__(self):
        print("Henry")

my_class = Person   #将类名赋值给变量
my_class()

#也可以将对象传递给集合对象中
obj_list = []
obj_list.append(print_name)
obj_list.append(Person)

"""
输出:
Tony     为列表第一个元素print_name()运行输出值
None     为列表第一个元素print_name()的函数返回值,默认返回None
Henry    为列表第二个元素Person()的__init__方法输出值
<_main_.Person object at...        为列表第二个元素Person()实例化对象值
"""
for item in obj_list:
    print(item())

特点(3)对象(函数)也可以作为返回值,这也是装饰器实现的基础

def print_name(name = "Tony"):
    print(name)


#将函数当成返回值
def decorator_func():
    print("start...")
    return print_name

my_func_return = decorator_func()  #用变量接收函数返回值
my_func_return("小明")

特点(4)对象(函数)还可以作为参数传递给另外一个函数,这也是装饰器实现的基础之一

def a():
    print(1)

def b(func):
    return func

c = b(a)  #调用b(),返回值赋值给变量c
c()     #实例化,运行,输出1

3、type(类型)、class(类)、object(对象)三者的关系

type有两个作用,一种是通过type(对象)查看对象的类型;另一种是通过type()创建一个类,这属于元类编程的范畴。

type可以创建一个类,class用来声明一个类,object是所有类中的基类;

python中所有的类都是继承自object;type可以创建类,type本身也是类,也继承自object。(可以通过类名.__bases__去获取该类继承的父类)

那么,基类object是由谁来创建的呢?是由type创建的,而type又继承了object。

——————————————

这部分内容超出了我之前的理解,我的理解也就是相对比较浅显。看完视频后的几个疑惑:1、type在我印象里只有一个type()方法,用来获取某个对象/变量的所属类型,可视频里又说type可以创建一个类,是什么意思呢?创建类的方法不是class ClassName的声明形式吗?2、python中所有类都继承自object类,这个好理解。但又说type本身也是类,还可以创建类,又继承自object,而基类object又是由type创建的。这到底是怎么回事?

查阅了知乎上一篇文章(https://zhuanlan.zhihu.com/p/100885824?share_code=11mkkAKbep1Li&utm_psn=1981681425683064242),看完后理解上稍有提升,部分概念梳理一下:

(1)若有class A,其实例对象a;有A类的子类class B,其实例对象b;那么通过type()方法可以获取对象的所属类别,如type(a)为A(class '__main__.A'),type(b)为B(class '__main__.B'),这个好理解,就是a的所属类型为A,b的所属类型为B。

那么如果查询type(A)/type(B)呢,即要查询类A/B的所属类型呢?type(A)/type(B)均为type类(class 'type'),即类A的类型为"type",这里也就说明"type"本身也是一个类/类型。

通过__bases__方法继续查询A和B的父类,分别为class 'object'和class '__main__.A'。

再引申,如果创建变量i =2,那么type(i)返回"int",继续type(int)则返回“type”。

针对上述实例对象a,b及变量i,是否可以通过.__bases__方法获取其父类呢?——答案是不行,系统会报错。

稍加总结:type可以理解为“基类型”,所有的类、实例对象、变量都是具备“类型”这个属性的,如上面实例对象a的类型就是A,而类A的类型则是type,实例对象b的类型是B,类B的类型也是type,对变量i来说,其类型是int,而int的类型还是type,这就是一切对象/变量的类型归根结底都是type,实际操作上type()方法会返回其关系最近的一个类型。

而object可以理解为“基类”,其对应的是类,只有类才会有类这个属性,像实例对象、变量都是类的实例化,这些都不属于类了。对于类来说,才有父类这个概念,才可以通过.__bases__方法获取父类,而实例化对象/变量不是类,所以谈不上父类这个概念,所以使用__bases__会报错。

(2)第二点其实文章里有结合python底层C语言实现的解释,记住:1、object类是所有类(class)的父类,包括type类,object类的父类为空;2、type类是所有类的类型,即为所有类(class)都可由type实例化而来,包括type类自己。type(object)返回<class 'type'>,type.__bases__返回<class 'object'>,object.__bases__返回()即无父类。

最后关于type/object/class三者稍加归纳的一点:当使用class声明一个类时,python内部会调用type()去创建这个类,同时这个类会继承object基类。

6、python中的常见类型

数值类型(int/float/complex/bool)、None(全局只有一个)、迭代类型、序列类型(list/range/tuple/str...)、映射(dict)、集合(set)、其他类型(模块类型、class和实例、函数类型、方法类型\object对象、type类型等)等。

Chapter2 魔法函数(魔术方法)

1、魔术方法是python中通过固定名称去定义实现的特定功能方法,类定义中增加魔术方法可以对类进行功能拓展

class Student:
    def __init__(self, student_list):
        self.student = student_list

    #魔术方法getitem
    def __getitem__(self, item):
        return self.student[item]

student =  Student(["古华", "夏洛特", "大海"])   #此时student是实例化对象
#如果类定义中不加魔术方法,该实例对象student无法被遍历
students = student.student     #此时student是实例化对象student的student属性
for stu in students:
    print(stu)

#类定义中增加了__getitem__魔术方法后,可以直接遍历实例对象
for item in student:
    print(item)
class Student:
    def __init__(self, student_list):
        self.student = student_list

    # 魔术方法getitem,可以使该类的实例对象可以被遍历
    def __getitem__(self, item):
        return self.student[item]

    # 魔术方法str,可以使对象可以通过print()方法显式化打印输出
    def __str__(self):
        return ','.join(self.student)

student = Student(['1', '22', '333'])

for item in student:
    print(item)

print(student)

#向量运算
class myVector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    #魔术方法add
    def __add__(self, other_instance):
        re_vector = myVector(self.x + other_instance.x, self.y + other_instance.y)
        return re_vector

    #魔术方法str
    def __str__(self):
        return f"x: {self.x}, y: {self.y}"

v1 = myVector(1, 2)
v2 = myVector(2, 3)

print(v1 + v2)