PY入门4——面向对象篇

面向对象基础

将属性、方法打包到一个对象上,就是面向对象编程

类与对象

类:一组具备相同属性、方法的模板
对象是类的实例对象,可参考前端JS进阶回顾1中实例化的描述

1
2
3
4
5
6
7
class Person:
pass
p1=Person()
p1.name="Jack"
p1.sex='male'
print(p1.__dict__) #特殊属性,字典形式存储对象属性
# {'name': 'Jack', 'sex': 'male'}

上述是动态的为对象增加属性,但不推荐使用

1
2
3
4
5
class Person:
def __init__(self,name,sex):
self.name=name
self.sex=sex
p1=Person('Jack','male')

上述使用初始化方法__init__为对象设置属性,当实例化时自动调用__init__方法,self指向当前对象(在js中就是this)

实例方法

为类的实例对象增加方法

1
2
3
4
5
6
7
8
9
10
11
class Person:
def __init__(self,name,sex):
self.name=name
self.sex=sex
def work(self):
print(f'{self.name} are working')
def relax(self):
print(f'{self.name} are relaxed')
p1=Person('Jack','male')
p1.work()
p1.relax()

魔法方法

py提供的用于定义类的特殊行为,以__开头,如__init__
这些方法不需要手动调用,而是在合适的时机自动调用(类似前端的生命周期)

1
2
3
4
5
6
7
8
9
10
#初始化方法
__init__
#字符串表示的方法,即定义该方法并存在返回值时,将该对象转为该返回值
__str__
#比较两个对象是否相等,判断两个实例对象是否相等时,调用该方法
__eq__
#支持比较对象的大小(小于、小于等于、大于、大于等于),同上理
__lt__、__le__、__gt__、__ge__
#删除对象时调用,或py执行文件结束
__del__

实例属性与类属性

实例属性是属于具体对象的属性(对象的特有属性)
类属性是属于类本身的属性,所有实例共享的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Person:
leg=2
def __init__(self,name,sex):
self.name=name #实例属性
self.sex=sex
if name=='Jack':
self.leg=1
def work(self):
print(f'{self.name} are working')
def relax(self):
print(f'{self.name} are relaxed')
p1=Person('Jack','male')
p2=Person('Mary','male')
print(p1.leg,p2.leg) #1,2

通过实例查找属性时,优先查找实例属性,不存在时再查找类属性

类方法与静态方法

类方法需要用@classmethod来表示为类方法,方法的第一个参数必须为类对象,习惯以cls作为形参。
静态方法使用@staticmethod标识

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Person:
water=False
@classmethod
def drink(cls):
cls.water=True
@staticmethod
def talk():
print('I am Person')
def run(self):
pass
if __name__ == '__main__':
P1 = Person()
P1.drink()
print(P1.water)
print(Person.water)
"""
True
True
"""

异常

程序运行中出现的错误会中断执行流程
NameError、TypeError、IndexError、KeyError、ValueError等等
捕获异常

1
2
3
4
5
6
7
# 语法
try
...#可能会异常的代码
except [异常类型 as 变量名]:#选写,不写的话默认捕获所有异常,写的话就匹配异常
...#异常处理代码
[finally:
...]#不管是否有异常,都会执行的代码

PY入门4——面向对象篇
http://example.com/2026/03/23/PY入门4——面向对象篇/
作者
印星
发布于
2026年3月23日
许可协议