Python之路【第六篇】python基础 之面向对象(一)

一、三大编程范式

1、面向过程编程

2、函数式编程

3、面向对象编程

二、编程进化论

1.编程最开始就是无组织无结构,从简单控制流中按步写指令

2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比方说,你定义了一个函数),便实现了代码重用,且代码由无结构走向了结构化,创建程序的过程变得更具逻辑性

3.我们定义函数都是独立于函数外定义变量,然后作为参数传递给函数,这意味着:数据与动作是分离的

4.如果我们把数据和动作内嵌到一个结构(函数或类)里面,那么我们就有了一个‘对象系统’(对象就是数据与函数整合到一起的产物)。

三、面向对象设计与面向对象编程

 1 #  面向对象设计
 2 def dog(name,gender,type):  # 相当于类的概念
 3     #  动作
 4     def jiao(dog):
 5         print("一条 %s 正在叫" %dog["name"])
 6     def chi(dog):
 7         print("一条 %s 正在吃骨头"%dog["name"])
 8     # 属性 特征
 9     def init(name,gender,type):  # 初始化函数
10         dog1 = {
11             "name": name,
12             "gender": gender,
13             "type": type,
14             "jiao": jiao ,
15             "chi": chi
16         }
17         return dog1
18     return init(name,gender,type)
19 d1 = dog("xiaoming","mu","zangao") # 相当于一个对象
20 d2 = dog("xiaogang","mu","zangao")
21 print(d1)
22 d1["chi"](d1)
23 d2["jiao"](d2)

四、小结

一门面向对象的语言不一定会强制你写 OO 方面的程序。例如 C++可以被认为“更好 的 C”;而 Java,则要求万物皆类,此外还规定,一个源文件对应一个类定义。

然而,在 Python 中, 类和 OOP 都不是日常编程所必需的。尽管它从一开始设计就是面向对象的,并且结构上支持 OOP,但 Python 没有限定或要求你在你的应用中写 OO 的代码

用面向对象语言写程序,和一个程序的设计是面向对象的,两者是八杆子打不着的两码事。

纯C写的linux kernel事实上比c++/java之类语言搞出来的大多数项目更加面向对象——只是绝大部分人都自以为自己到处瞎写class的面条代码才是面向对象的正统、而死脑筋的linus搞的泛文件抽象不过是过程式思维搞出来的老古董。

五、类和对象

1.什么叫类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),用它来生产真实的物体(实例)。

2.什么叫对象:睁开眼,你看到的一切的事物都是一个个的对象,你可以把对象理解为一个具体的事物(事物即数据和动作的结合体)

(铅笔是对象,人是对象,房子是对象,狗是对象)

3.类与对象的关系:对象都是由类产生的,上帝造人,上帝首先有一个造人的模板,这个模板即人的类,然后上帝根据类的定义来生产一个个的人

4.什么叫实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫做一个实例(实例=对象)

class Teacher:
    ‘这是一个教师类’
    def __init__(self,name,age,job_in,teach_subjects): # 实例化
        self.name = name # self 实例本身
        self.age = age  # 相当于teacher1.name = name
        self.job_in = job_in
        self.teach_subjects =  teach_subjects
    def teach(self):
        print("%s 在 %s 教 %s" %(self.name,self.job_in,self.teach_subjects))
    def talk(self,name,content):
        print("%s 在和 %s 讨论 %s"%(self.name,name,content))

teacher1 = Teacher("lhf",33,"oldboy","python")  # 对象# 就相当于,理论上teacher1 = Teacher.__init__(teacher1,name,age,job_in,teach_subjects)

teacher2 = Teacher("wusir",28,"oldboy","python") # 对象

teacher1.teach() # 调用教学方法
teacher2.talk("小明","如何学好python")
5.1 属性类是用来描述一类事物,类的对象指的是这一类事物中的一个个体是事物就要有属性,属性分为1:数据属性:就是变量2:函数属性:就是函数,在面向对象里通常称为方法注意:类和对象均用点来访问自己的属性

类的数据属性

1 class ChinesePeople:
2     government=‘共产_党‘
3
4 print(ChinesePeople.government)

类的函数属性

 1 class Chinese:
 2     ‘这是一个中国人的类‘
 3     goverment = "共产_党"  # 数据属性
 4     def __init__(self,name,age,gender):  # 创建一个实例对象
 5         print(" 我开始了")
 6         self.mingzi = name
 7         self.nianling = age
 8         self.xingbei = gender
 9     def gongfu():   # 函数属性  又称方法
10         print("会功夫")
11     def xihuanchi(self):
12         print("%s 讲究吃"%self.mingzi)
13 p1 = Chinese("小明",18,"female")  # 对象
14 print(p1.__dict__) # 相当于init的返回值 执行__init__函数 {‘mingzi‘: ‘小明‘, ‘xingbei‘: ‘female‘, ‘nianling‘: 18}
15 print(p1.mingzi)  # 小明
16 print(p1.goverment) #共产_党
17 print(Chinese.__dict__)# {‘__init__‘: <function Chinese.__init__ at 0x0000016DDEDCF378>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Chinese‘ objects>, ‘gongfu‘: <function Chinese.gongfu at 0x0000016DDEDCF400>, ‘goverment‘: ‘共产_党‘, ‘xihuanchi‘: <function Chinese.xihuanchi at 0x0000016DDEDCF488>, ‘__module__‘: ‘__main__‘, ‘__doc__‘: ‘这是一个中国人的类‘, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Chinese‘ objects>}
18 Chinese.gongfu() #会功夫
19 Chinese.xihuanchi(p1) # 小明 讲究吃
20 p1.xihuanchi() #小明 讲究吃

查看类属性

我们定义的类的属性到底存到哪里了?有两种方式查看
dir(类名):查出的是一个名字列表

类名.__dict__:查出的是一个字典,key为属性名,value为属性值

特殊的类属性

 1 # class dog :
 2 #     ‘这是定义一个狗的对象‘
 3 #     name = "藏獒"
 4 #     def jiao(self):
 5 #         print("一条 %s 正在汪汪汪" %self)
 6 # dog.jiao("藏獒")
 7 # print(dir(dog)) # 显示结果是一个列表,包含类(包含内建属性在内的)所有的属性名
 8 # print(dog.__dict__) # 显示结果是一个字典,包含类的所有属性:属性值
 9 #
10 # print(dog.__name__)# 类C的名字(字符串)
11 # print(dog.__doc__)# 类C的文档字符串
12 # print(dog.__base__)# 类C的第一个父类(在讲继承时会讲)
13 # print(dog.__bases__)# 类C的所有父类构成的元组(在讲继承时会讲)
14 # print(dog.__dict__)# 类C的属性
15 # print(dog.__module__)# 类C定义所在的模块
16 # print(dog.__class__)# 实例C对应的类(仅新式类中)

5.2 类属性与对象(实例)属性

#  类属性的增删改查

# class Chinese:
#     country=‘China‘
#     def __init__(self,name):
#         self.name=name
#
#     def play_ball(self,ball):
#         print(‘%s 正在打 %s‘ %self.name,ball)
#
#     def say_word(self,word):
#
#         print(‘%s 说 %s‘ %(self.name,word))
# 数据属性的增删改查
# 查看类的属性
# print(Chinese.country)
# 修改
# Chinese.country = "English"
# print(Chinese.country)
# 增加
# Chinese.location = "Asia"
# print(Chinese.__dict__)
# print(Chinese.location)
# # 删除
# del Chinese.location
# print(Chinese.__dict__)

# 实例属性的增删改查
# 查看
# p1 = Chinese("xiaoming")
# print(p1.__dict__)
# # 查看
# print(p1.name)
# # 删除
# del p1.name
# print(p1.__dict__)
# # 增加
# p1.gender = "man"
# print(p1.__dict__)
# # 修改
# p1.gender = "woman"
# print(p1.__dict__)

# 函数属性的增加修改
# class Chinese:
#     country=‘China‘
#     def __init__(self,name):
#         self.name=name
#
#     def play_ball(self,ball):
#         print(‘%s 正在打 %s‘ %(self.name,ball))
#
#     def say_word(self,word):
#
#         print(‘%s 说 %s‘ %(self.name,word))
#  # 增加
# def eat_food(self,food):
#     print("%s 正在吃 %s" %(self.name,food))
# Chinese.eat = eat_food
# print(Chinese.__dict__)
# p1 = Chinese("xiaoming")
# # print(p1.__dict__)
# p1.eat("fan")

# 注意事项

 1 # 1
 2 # class Chinese:
 3 #     country = "China"
 4 #     def __init__(self,name):
 5 #         self.name = name
 6 #     def play_ball(self,ball):
 7 #         print("%s 正在打 %s" %(self.name,ball))
 8 # p1 = Chinese(‘alex‘)
 9 # print(p1.country)
10 # p1.country = "日本" # 相当于在实例里面创建了个新的
11 # print(p1.__dict__) # {‘name‘: ‘alex‘, ‘country‘: ‘日本‘}
12 # print("类的——",Chinese.country)
13 # print("实例的",p1.country)
14
15 # 2、不调用 . 直接找全局变量
16 # country = "中国"
17 # class Chinese:
18 #     country = "China"
19 #     def __init__(self,name):
20 #         self.name = name
21 #         print(country)  # 中国
22 #     def play_ball(self,ball):
23 #         print("%s 正在打 %s" %(self.name,ball))
24 # p1 = Chinese(‘alex‘)
25 # print(p1.country)  # China
时间: 2025-01-11 16:06:01

Python之路【第六篇】python基础 之面向对象(一)的相关文章

python之路第六篇_面向对象

面向对象介绍 1.世间万物皆对象 2.只要是对象,就肯定属于某种品类 3.只要是对象,就肯定有属性的: 一个类可以事例化多个对象,每个对象都有不同的属性和方法. 面向过程 Vs面向对象 面向过程编程(procedural Programming) Procedural programming uses a list of instructions to tell the computer what to do step-by-step. 面 向过程编程依赖 - 你猜到了- procedures,

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进

Python之路【第九篇】:Python基础(26)——socket server

socketserver Python之路[第九篇]:Python基础(25)socket模块是单进程的,只能接受一个客户端的连接和请求,只有当该客户端断开的之后才能再接受来自其他客户端的连接和请求.当然我 们也可以通过python的多线程等模块自己写一个可以同时接收多个客户端连接和请求的socket.但是这完全没有必要,因为python标准库已经为 我们内置了一个多线程的socket模块socketserver,我们直接调用就可以了,完全没有必要重复造轮子. 我们只需简单改造一下之前的sock

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

第六篇 模块基础

目录 第六篇 模块基础 一 模块的四种形式 二 import和from...import 三 循环导入问题 四 模块的搜索路径 五 python文件的两种用途 六 包 第六篇 模块基础 一 模块的四种形式 啥是模块 模块是一系列功能的集合体,而函数是某一功能的集合体,因此模块可以看成是一堆函数的集合体.一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块.如果这个py文件的文件名为module.py,模块名则是module. 模块的四种形式 2.1 自定义模块:如果你自己写一个P

Python之路番外:PYTHON基本数据类型和小知识点

Python之路番外:PYTHON基本数据类型和小知识点 一.基础小知识点 1.如果一行代码过长,可以用续行符 \换行书写 例子 if (signal == "red") and (car == "moving"): car = "stop" else : pass 等同于 if (signal == "red") and (car == "moving"): car = "stop"

Python之路【第一篇】:Python基础

本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语句 表达式for 循环 break and continue 表达式while 循环 作业需求 一. Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语

Python之路【第一篇:Python基础】

一:python的使用 1.python的两个版本:python2.0与python3.0.这两个版本的区别在于python3是不向下兼容python2的组件和扩展的,但是在python2.6和2.7的两个版本中将会继续兼容python2.0和3.0两个版本.简单点说就是python2.6与2.7是2.0版本向3.0版本的过渡版本,同时python的2.7版本也将是最后一个2.0版本,之后将全部使用python的3.0版本. Windows中python3.x的安装: 1 1.下载安装包 2 h

Python之路【第一篇】:Python前世今生

Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第五!!! 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众

Python之路【第一篇】:初识Python

Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第五!!! 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等众