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

推荐订阅源

Cyberwarzone
Cyberwarzone
F
Full Disclosure
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
J
Java Code Geeks
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
L
LINUX DO - 最新话题
T
Threatpost
S
SegmentFault 最新的问题
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
C
Cyber Attacks, Cyber Crime and Cyber Security
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
S
Schneier on Security
V
Vulnerabilities – Threatpost
D
DataBreaches.Net
G
GRAHAM CLULEY
Latest news
Latest news
P
Privacy International News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
L
Lohrmann on Cybersecurity
T
The Exploit Database - CXSecurity.com
Security Latest
Security Latest
G
Google Developers Blog
L
LangChain Blog
MyScale Blog
MyScale Blog
Project Zero
Project Zero
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
N
News | PayPal Newsroom
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
T
Tor Project blog
C
Check Point Blog
Google Online Security Blog
Google Online Security Blog
GbyAI
GbyAI
The Last Watchdog
The Last Watchdog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学

碎言

不懂就别瞎掰掰:【程序员的常识】写的什么玩意? AI 辅助编程下的程序设计与代码编写 使用 Next.js 和 Tailwind CSS 构建可编辑和删除的 ToDo 待办事项应用 探索编程新境界:MarsCode 助你一臂之力 使用 Next.js 和 Tailwind CSS 搭建静态图片展示站点并部署到 Vercel AI 辅助编程:免费工具的优缺点及官网一览 GitHub push更新总是失败,写个python脚本解决 把博客从GitHub迁移到到了vercel ComfyUI 和 Flux.1 安装与使用教程 Flux.1 入门必知:硬件、环境、模型 Git项目的子文件夹中的内容无法同步到远程仓库的解决方法 blender流体Fluid使用中没有流体、流体穿模等一些问题的解决方法 博客聚合网站:积薪,竟然关闭了! blender日常使用中的一些技巧 虽然只有我自己在用,但还是更新了碎言博客的源代码, 与其在迷茫中困惑,不如在努力中前进 差点忘了我还有一个博客... 秧歌、博客和AI 终于熬到了新手上路 好久没有更新博客了。。。 老妈大腿骨骨折,最近一直在医院护理 Hello, September! Ubuntu开机自动启动Docker容器运行WordPress Docker 简单快速安装部署WordPress Docker下安装MySQL 加碘盐能防核辐射的话,还怕什么核战争? shields.io 一个简洁、一致、清晰的徽章 Ubuntu下使用root登录ssh的设置 GitHub Actions 构建、部署 Next.js项目 我又用回了"IE"--edge ubuntu-22-live-server 设置固定IP Next项目部署GitHub pages的一些坑 整理了一个下午的收藏夹...... 短暂而忙碌的暑假即将谢幕 GitHub Actions 是干什么用的? 放弃Next.js重构博客:经验、教训与未来技术探索 关于Google LCP 问题:超过了2.5秒 验证已通过 仅用了几个小时就使用next.js重构博客的所有功能 关于使用Next.js重构博客构思的记录 使用Tailwind css和JavaScript实现一个简单的返回顶部功能 罗技K380 F1-F12 功能键锁定 PHILIPS猛禽SPK8404机械键盘手感真是超赞! 局域网的DNS设置192.168.0.1与8.8.8.8,114.114.114.114有什么区别? 史诗结合的浪漫:《长安三万里》 聊 聊 友 情 链 接 1767个中文博客的数据洞察:中文博主都喜欢干啥? python requests 设置读取超时时间 八月回顾:博客之路,一路前行 Docker基础学习笔记和常用命令汇总 vim常用命令整理 Ubuntu 22 安装Docker过程记录 使用python结合feedparser模块编写自己的私人RSS订阅程序 博客大数据分析:38880条博文揭示博主最爱写什么? Windows下国产杀毒软件还有选择吗?火绒安全可以一试。 export exports module.exports 这三个命令的区别是什么如何使用? 时代的变迁:从56K拨号上网到1G光纤的回忆 理工计算机专业准大学生如何选配笔记本? 使用JavaScript编写自己的私人RSS订阅程序 如何使用CSS为博客标题设置彩虹颜色? 最终还是决定使用传统的网线来解决千兆速率问题。 1300M USB双频2.4+5G无线网卡的一些常识和使用技巧 Python Gui新框架:NiceGui之初体验 pycharm 正在关闭项目(closing project)无法关闭退出程序的解决方法! 速度与优雅:博客性能优化之旅 久了,博客主题就会一直做减法 七月的焦虑 在react中使用复制插件clipboard.js react中如把HTML代码转成字符串进行渲染? react useEffect()中使用lodash库中的防抖debounce react useEffect() 为什么在开发模式的时候会执行两次? 七年之痒!别了我曾深爱的MacBookPro 前端React+Material UI开发环境的快速搭建 一键更新Github部署的静态博客 编程新手学习过程中如何更好的提问? Typed.js 一款有意思的网页打字机效果库 解决错误 ERROR [WinError 10049] 在其上下文中,该请求的地址无效。 Stable Diffusion 相关教程与模型的记录 Stable Diffusion ControlNet openpose 报错无法使用 在react或vue中使用localStorage存储数据 使用React+Vite+TailwindCSS+daisyUI打造一个简单的ToDos 碎言静态博客 聊聊Python中的装饰器 npm更换源与nrm安装与配置 pip临时修改下载源 Vue快速学习笔记(9)Vuetify配置及简单使用 Vue快速学习笔记(8)webpack4.X配置Vue开发打包环境 Vue快速学习笔记(5)使用路由vue-router(1) Vue快速学习笔记(4)Vue组件中的数据传递 Vue快速学习笔记(3)Vue的组件 Vue快速学习笔记(2)Vue中的监听与计算属性 Vue快速学习笔记(1)Vue实例基础 基于Django构建的小学生英文单词背写检测考试系统。 如何在Python程序中使用配置文件.ini(ConfigParser) 写在我的博客PV10万时:聊聊编程与画画 python3函数学习笔记简单总结 PythonINI配置文件读写的简单方法 Python open()函数文件打开、读、写操作总结 Python os.path模块中一些常用方法的整理总结 Python 采集数据三步曲之[Requests + re.py模块进行数据采集] Python 采集数据三步曲之[Requests开源协议的HTTP 库]
Python面向对象编程(OOP)初探
J.sky · 2017-09-29 · via 碎言

输入图片说明

面向对象编程

说起面向对象编程,除了那些晦涩抽象的定义,我脑海中印象比较深的就是那张王宝强的表情图:程序员?面向对象编程?哈哈哈没有对象你编毛程?

三大特征

学过java的同学应该非常的了解这三个特征:封装、继承、多态 在Python的世界中,一切都是对象,为什么要用面向对象模式来进行编程?因为这样更接近人类对自然的认识过程,更直观,如果对面向编程的理论不太了解,建议百度搜索相关知识了解一下。

Python中的Class

在Python中定义一个Class是非常简单的,语方法如下:

Class classname(object):
    pass

其中(object)是用来定义需要继承的父类,Python中,可以继承多个类,这个与java的单继承不同。

def run():
    print("我会跑!")

class Animal(object):
    k = 0#类属性
    def __init__(self,name):#类构造器
        self.name = name#实例的属性
    #实例的方法
    def say(self):
        Animal.k += 1
        print("{0}:我会呼吸!".format(self.name))
        print("Animal.k={0}".format(Animal.k))

a = Animal("aaaa")
a.say()#执行实例的方法
print("Animal.k:{0}".format(Animal.k))#打印类属性
print(Animal.__init__)
print(Animal.say)
Animal.m = 1
a.color = "red" #动态的添加属性
a.run = run()#动态的添加属性
print("我的颜色是=%s" % a.color)
print("Animal.m=%s" % Animal.m)
print("a.m=%s" % a.m)
# print("Animal.a:%s" % Animal.a)  这里会抛出错误

上边的实例不难发现,在类中,包括k类变量、self.name实例变量、say实例的方法,这些成员,都是类的的属性。 Python中的实例对象可以动态的添加类变量及实例变量,只需要点一个.这和Java不同(当然Java也可以通过反射aop切面方式动态为对象添加功能方法)。

构造器和self

__init__(self)类中的这个特殊方法就是类的构造器,self代表着这个类创建的对象。 关于成员变量我们可以这样理解:对象和类说:关于变量,你的就是我的,我的确只是我的。

Python的继承

Python中,类的继承很简单方便,看下下边的代码

class Dog(Animal):
    k = 999 #我们定义了一个与父类相同的类变量
    def __init__(self,name):#同样定义了一个相同名称的实例变量
        Animal.__init__(self,name)#注意这里没有:::::号

    def say(self):
        print(self.name+":我的叫声是:汪汪汪!")
        print("Dog.k={0}".format(Dog.k)),

dog = Dog("wangwang")
dog.say()
print("Animal.k:{0}".format(Animal.k))#打印父类属性
print("Dog.k:{0}".format(Dog.k))#打印子类属性
# dog.run #这个动态添加到父类创建的实例中的变量是无法继承过来的。 非得执行的话会报错。

通过上边的例子,我们可以看出,类继承后,实例的变量是可以继承的,通过调用父类的__init__()方法来简化实例构造。 但是父类的类属性是无法继承的,他们互相独立存在在内存中。 Dog类中的也有一个say()的方法,象这样与父类拥有相同的方法名称而具有不相同的执行结果的行为叫做方法重写。

多态

我们在创建一个新类继承Animal

class Cat(Animal):
    def __init__(self,name):
        Animal.__init__(self,name)
    
    def say(self):
        print(self.name+":我的叫声是:喵喵喵")

cat = Cat("Tom")
cat.say()

isinstance()函数,可以用来判断一个变量是否是某个类,我们测试一下

print(isinstance(cat,Cat))#True
print(isinstance(cat,Animal))#True
print(isinstance(a,Animal))#True
print(isinstance(a,Cat))#False

很明显,动物的对象不能说成是猫,但猫的对象可以是猫类,说猫是动物类也没什么错误。也就是说,继承是从上到下。 那多态是什么?我们还需要一个函数,然后来看看。

def isay(animal):
    animal.say()

isay(a)#aaaa:我会呼吸!
isay(dog)#wangwang:我的叫声是:汪汪汪!
isay(cat)#Tom:我的叫声是:喵喵喵

通过isay()方法的输出,我们多少对多态这个概念有那么一点了解了,回想当年学Java的多态的时候,和现在的情况大同小异乎? 如果我们随便建一个类,包括say()方法,然后用isay()方法输出打印,会不会也是产生多态的效果呢? 答案是:会的!在Pyhong中,这就是动态语言的“鸭子类型”,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。 然在Java静态语言中,则会对父类进行检查,如果不是同一个父类,那么就会报错。

好吧,有关Python类,对象相关先说到这里,希望大家国庆节快乐哦!

本文源码下载: