Python面向对象

1.类属性和实例属性

定义在__init__方法外的属性即为类属性,它是整个类所共有的属性,也就是说:不管存在多少个同一类型的对象,他们的类属性都是相同的,改变了其中一个其余所有的都会改变。类属性可以直接通过类名访问和修改,通过实例对象也能进行访问,但是不能修改,因为修改实际上是给实例对象添加一个和类属性同名的实例属性,比如 car1.tire_number = 10000 这句话并没有修改类属性,而是给car1这个对象添加了一个属性。

反之,定义在__init__方法内部的属性为实例属性,示例属性每个对象都是单独的,修改不会影响其余的对象。

python 复制代码
class Car(object):
    tire_number: int = 4  # 类属性,整个类共有
    
    def __init__(self, brand, speed):
        self.brand = brand
        self.speed = speed
    
    def run(self):
        print(f'{self.brand}时速为{self.speed}')


car1 = Car('Ford', 80)
car2 = Car('chevy', 100)

Car.tire_number = 10

print(car1.tire_number)  # 10
print(car2.tire_number)  # 10

2. self

和C++中的 this 指针类似,指向自身的指针,可以通过这个指针调用其他的实例属性和方法。

3. 构造方法 init

和C++构造函数类似,当对象被创建时自动调用,因此创建对象时参数必须一一对应

4. 类方法

类方法是使用 @classmethod 装饰器修饰的实例方法,主要是用来修改类属性,它可以通过类名和实例对象调用,它不能直接访问实例属性

5. 静态方法

通过 @staticmethod 装饰器装饰的方法,表示这个方法既不使用类对象也不使用实例对象,是类中一个普通的函数。通过类对象和实例对象调用。

6. 面向对象三大特性

6.1 封装

在定义实例属性时,给属性名或方法名前面加上 '_'(一个下划线),表示这个属性是私有的,但仅仅是约定俗称的君子协议,实际上类外部仍可访问和修改;给属性名或方法名前面加上 '__'(两个下划线),触发名称修饰,python内部会将原属性名变为 _类名__属性名,但还是可以通过改变后的名字进行访问和修改。私有属性只能被这个类的其他属性或方法访问,因此一个类需要有 getter,setter 方法,下面是实现 getter,setter,deleter的方法:

对于@property这个装饰器来说,setter的设置需要依赖于getter的函数名,因此setter的前提是存在getter,但是property()这个函数可以做到没有getter但有setter,但意义不大,这里不写。

6.2 继承

6.3 多态

相关推荐
浪子明X7 分钟前
十六位账本怎样发现传输差错:Internet Checksum 生活类比
开发语言
niucloud-admin1 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
小叶肥辉2 小时前
LangChain链和LangGraph图的学习笔记【三】——分别用langchain_openai库和langchain_community库调用大模型
笔记·python·langchain
2401_873479402 小时前
IP属地为什么有时显示外省?用IP查询工具核查动态分配、运营商出口与GeoIP库
python·tcp/ip·ip
xiangyun613 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun613 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
OKkankan4 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
白远山4 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析
山哥ol5 小时前
【Geany 环境配置与中文乱码解决参考】
python
DevRay5 小时前
Java 21虚拟线程深度实战:告别线程池焦虑,百万并发吞吐量直接翻倍(原理+代码+避坑)
java·开发语言