news 2026/1/15 14:37:16

Python面向对象编程入门指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python面向对象编程入门指南

Python学习笔记-Day7

面积对象

面向对象编程(Object Oriented Programming,简称 OOP,面向对象程序设计)是一种程序设计思想。用面向过程的思想设计程序时,程序是一条条指令的顺序执行,当指令变得多起来时,它们可以被分隔成我们先前实验中讲解过的函数。而面向对象编程则是将对象视为程序的组成单元,程序的执行通过调用对象提供的接口完成。

类与对象

定义一个简单的类

class 类名: #初始化方法,然后函数在类中称为方法 def __init__(self): pass

类的使用

#定义一个类名为Dog class Dog: #初始化方法 def __init__(self, name, age): #设置对象的属性值 self.name = name self.age = age #定义了New_dog函数,在类中函数也称方法 def New_dog(self): print("Dog is {} ,year old {}".format(self.name, self.age)) #实例化Dog类,变成对象,然后赋值给dog dog = Dog("dahuang", 19) #通过实例化后的值,然后再访问里面的方法 dog.New_dog()
#定义一个类为Dog class Dog: # 初始化方法 def __init__(self,name): #添加对象的属性值 self.name = name #调用了repr魔术方法,只有在交互式都会触发该方法 def __repr__(self): #特殊方法 #print() 时自动调用 return 'Dog: {}'.format(self.name) dog = Dog("two dog") print(dog) print(dog.name)
class Dog: def __init__(self, name, age): self.name = name self.age = age def __str__(self): # ✅ 特殊方法 # print() 时自动调用 return f"Dog: {self.name}" def __pre__(self): # ❌ 这不是特殊方法! # 只是普通方法,不会自动调用 return f"Dog: {self.age}" dog = Dog("dahuang", 18) print(dog) # 自动调用 __str__()

封装

在面向对象的语言中,封装就是用类将数据和基于数据的操作封装在一起,隐藏内部数据,对外提供公共的访问接口。可以理解为API接口

#定义一个Dog的类 class Dog(object): def __init__(self, name): self.name = name #获取狗的名字的方法 def get_name(self): #返回的狗的名字为全部小写 return self.name.lower() #定义一个修改狗的名字的方法,可以通过传参数修改,value def set_name(self, value): self.name = value #狗的行为特征 def bark(self): print(self.get_name() + ' is making sound wowowowo') #定义一个Cat的类 class Cat(object): def __init__(self, name): self.name = name #获取猫的名字 def get_name(self): #修改猫的名字为全部小写 return self.name.lower() #修改猫的名字 def set_name(self, value): self.name = value #猫的行为特征 def mew(self): print(self.get_name() + 'is making sound mimimimi') #调用类之前先实例化成对象 #实例化 dog = Dog('DAhuang') #调用对象中的方法 print(dog.get_name()) #调用对象中的方法,通过这个方法来修改狗的名字 dog.set_name('er ha') #打印 print(dog.get_name()) dog.bark()

继承

可以快速创建新的类,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

  • 在 Python 中,object是所有类的根类
  • 当你定义一个类时,即使不显式指定,它也会默认继承自object
  • Python 3 中,class Animal:class Animal(object):是等价的
#继承 #object class Animal(object): def __init__(self,name): self.name = name def get_name(self): return self.name def set_name(self,name): self.name = name def make_animal(self): pass #继承父类的 class Dog(Animal): def make_animal(self): print(self.get_name() + ' is making sound wangwangwangwang') class Cat(Animal): def make_animal(self): print(self.get_name() + ' is making sound miaomiaomiaomiao') #实例化,并且赋值给dog dog = Dog('er ha') cat = Cat('jafeimao') #通过dog实例化后的对象,调用对象里的方法 dog.make_animal() cat.make_animal()

多继承

#创建一个类,然后命名为A class A(): #初始化方法 def __init__(self): #定义或者添加属性命名youzi self.name = 'youzi' #定义一个技能为Python def jinanA(self): print("-------------python-------------") #定义一个类为B class B(): #初始化方法 def __init__(self): self.age = 19 # 继承前者优先使用 def jinanB(self): print("-------------网络安全---------------") #定义一个类xueyuan,继承A和B的方法 class xueyuan(A, B): #初始化方法 def __init__(self): #调用父类A的初始化方法 #当子类继承多个父类时,Python不会自动调用所有父类的 __init__ 方法,需要手动调用 A.__init__(self) B.__init__(self) def Test(self): print('------------xueyuan---------------') #实例化类,变成对象 person = xueyuan() #通过对象调用类中的方法 person.jinanA() person.jinanB() person.Test()

多态

#!/usr/bin/env python3 class Animal(): def who(self): print("I am an animal") class Dog(Animal): def who(self): print("I am a dog") class Cat(Animal): def who(self): print("I am a cat") def Func(value): value.who() dog = Dog() cat = Cat() #利用函数,传入对象,这个实现的方法就是多态 Func(dog) Func(cat)

私有属性

私有属性privateprotected
名称私人的受保护的
用法__ 两个下划线代表私有的属性_ 一个下划线代表受保护的属性
class Myclass: def __init__(self): self._num1 = 0 self._num2 = 0 def __est(self): self._num1 += 1 print(self._num1) myclass = Myclass() #这里会提示找不到方法名,所以私有属性只有类中才能调用 myclass.__test() #这里受保护的可以直接修改,但是不建议这样做 myclass._num1 =10 print(myclass._num1)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/4 20:39:26

vsftpd 安装、升级、配置全流程总结(含问题解决方案)

一、遇到的核心问题总结在离线环境中,主要遇到以下问题:安装路径非默认:源码编译后 vsftpd 默认安装到/usr/local/sbin/vsftpd(而非/usr/sbin/),导致服务文件ExecStart路径不匹配,启动失败&…

作者头像 李华
网站建设 2026/1/5 8:03:17

HunyuanVideo-Foley部署:本地与云端GPU实战

HunyuanVideo-Foley部署:本地与云端GPU实战 在智能家居设备日益复杂的今天,确保无线连接的稳定性已成为一大设计挑战。蓝牙技术虽已发展至5.0版本,但实际应用中仍面临功耗、干扰和兼容性等问题。尤其在多设备共存的环境中,如何实现…

作者头像 李华
网站建设 2026/1/2 5:52:51

LangChain工具使用:简化AI函数调用

本章对应源代码:https://github.com/RealKai42/langchainjs-juejin/blob/main/lc-tools.ipynb 上一节中,我们学习了如何直接使用 openAI 的原生 API 去使用 function calling (tools)功能,需要自己维护历史、写参数类…

作者头像 李华
网站建设 2025/12/31 23:05:33

Docker 镜像打包为 tar 并在其他环境加载运行(离线部署实战指南)

Docker 镜像打包为 tar 并在其他环境加载运行(离线部署实战指南)适用场景:内网部署 / 无法访问 Docker Hub / 生产环境离线交付 阅读目标:掌握 Docker 镜像打包、传输、加载、运行的完整闭环一、为什么需要把 Docker 镜像打包成 t…

作者头像 李华
网站建设 2026/1/4 19:45:07

Docker 镜像体积优化实战:从 1GB 到 100MB

Docker 镜像体积优化实战:从 1GB 到 100MB适用人群:已经使用 Docker,有镜像体积焦虑的开发者 / 运维工程师 阅读目标:掌握 一套可复用的镜像瘦身方法论,而不是零散技巧一、为什么 Docker 镜像会变得这么大?…

作者头像 李华
网站建设 2026/1/14 7:45:54

LobeChat能否分配任务?团队协作智能调度

LobeChat能否分配任务?团队协作智能调度 在现代企业中,一个常见的场景是:产品经理在群里说“帮我把昨天会议里的三个需求整理成文档”,接着有人手动打开 Notion,翻找聊天记录,复制粘贴、重新组织语言——整…

作者头像 李华