##################################总结####################

1.

面向过程:一切以事物的发展流程为中心

面向对象:一切以对象为中心,一切皆为对向,具体的某个事物就是对象

优点:可维护性比原来好 缺点:编写相对比较复杂. 上手比较难.

面向过程: 应用程序相对比较小. 不需要大规模的设计
面向对象: 程序非常大. 项目管理 维护成本很高. 此时更适合用面向对象(结构)

打比方:
大象进冰箱
步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门

面向对象:大象, 你进冰箱.
此时主语是大象. 我操纵的是大象. 此时的大象就是对象

2. 类. 对象
类: 就是图纸. 创建对象的第一步. 先画图纸. 先写类.
对象: 对象就是车. 通过图纸造出来的具体的东西. 通过类来创建对象

class 类名:
  def__init__(self):#初始化方法,又被称为构造方法
        self.属性=值
        self.属性=值
        self.属性=值
  def fangfa(self):
    方法体(函数体,  return)
变量 = 类()
变量.属性 # 操作属性
变量.方法 # 调用方法
class HeShang:
def __init__(self, fh, name, miao):
self.fahao = fh
self.name = name
self.miao = miao def nianjing(self):
print("和尚会念经") def huayuan(self):
print("和尚会化缘") lzs = HeShang("花和尚", "鲁智深", "梁山水庙")

#不需要向原来一样传递一样的参数了
lzs.nianjing()
lzs.huayuan()

3.面向对象的三大特征

 面向对象三大特征: 封装, 继承, 多态. 只要是面向对象编程语言. 都有这三个特征.

(1)封装:把很多数据封装到一个对象中,把固定功能的代码封装到一个代码块, 函数, 对象,打包成模块,这都属于封装的思想.

1. 对属性的封装(__init__())
self.xxx = xxx
2. 对方法和功能的封装

(2)继承: 子类可以自动拥有父类中除了私有属性外的其他所有内容.

class Animal:
def dong(self):
print("动物会动, 顾雍") class Cat(Animal): # 子类其实是对父类的一种扩展
def catchMouse(self):
print("猫很皮, 抓老鼠")
c = Cat()
c.dong()
c.catchMouse() a = Animal() # 父类的对象不能执行子类中的功能
a.dong()
# a.catchMouse() # 创建的是动物. 动物不能执行抓老鼠

支撑继承多个继承

# python支持多继承
class Foo1:
def getMoney(self):
print('给你个大嘴巴子') def play(self):
print("玩儿") class Foo2:
def getMoney(self):
print('给多点儿') class Bar(Foo1, Foo2): # 离当前类最近的是亲爹, 后面的是干爹.
pass b = Bar() # 就近原则, MRO的C3算法
b.getMoney() # Foo2里的

(3)多态:同一个对象多种形态.

class Animals:
def eat(self):
print("动物就知道吃")
class pig(Animals):
def eat(self):
print("猪在吃")
class tiger(Animals):
def eat(self):
print("大虫在吃")
class lion(Animals):
def eat(self):
print("西几在吃")
class feeder:
def feed(self,Ani):
Ani.eat() #传进来的东西要会吃就行
# 动物园
pig = pig()
tiger=tiger()
lion=lion()
alex = feeder()
alex.feed(pig)
alex.feed(tiger)
alex.feed(lion)

多态的好处:  程序具有超高的可扩展性,面向对象思想的核心与灵魂,python自带多态.

    1. user_list = []
      while
      True:
              user = input(“请输入用户名:”)
              pwd = input(“请输入密码:”)
              email = input(“请输入邮箱:”)

      1. while循环提示用户输入:用户名、密码、邮箱
      2. 为每个用户创建一个对象,并添加到列表中。
      3. 当列表中的添加了3个对象后,跳出循环并以此循环打印所有用户的姓名和邮箱。如
user_list=[]

class UserInfo:
def __init__(self,username,password,email):
self.username=username
self.password=password
self.email=email
while True:
user=input('请输入用户名:')
pwd=input('请输入密码:')
email=input('请输入邮箱:') u=UserInfo(user,pwd,email)#创建对象
user_list.append(u)#把创建好的对象添加到列表中
if len(user_list)==3:
break for i in user_list: #i是user_list中的对象
print(f'用户名:{i.username},邮箱:{i.email}')

扩展  在原有的基础上添加  注册 登陆功能    注明:调用 2次注册 一次登陆   登陆只有3次机会

class User:
def __init__(self,username,password):
self.username=username
self.password=password
class Account:
def __init__(self):
self.user_list=[]#目的是存储用户信息
def login(self):
for i in range(3):
uname=input(">>请输入登陆名:")
upwd=input('>>请输入密码:')
for u in self.user_list:
if uname == u.username and upwd == u.password:
print('登陆成功')
return
else:
print('登陆失败')
def regist(self):
user=input('请输入注册的用户名:')
upwd=input('请输入注册的密码:')
u=User(user,upwd)#创建用户
self.user_list.append(u)#这样会出现重复的用户
def run(self):
self.regist()#自己类中的方法互相调用用self
self.regist()
self.login()
obj=Account()
obj.run()

在原有的基础上 强行装一波 文件

class User:
def __init__(self, username, password):
self.username = username
self.password = password class Account:
def __init__(self):
# self.user_list = [] # 目的是存储用户信息
pass def login(self):
for i in range(3):
uname = input("登录用户名>>>")
upwd = input("登录密码>>>") f = open("info", mode="r", encoding="utf-8")
for line in f:
lst = line.strip().split("_") # ["wusir", "123"]
u = User(lst[0], lst[1])#把循环的文件第一个位子 第二个位子 赋值给第一个位子和第二个位子
if uname == u.username and upwd == u.password:
print("登录成功")
return
else:
print("登录失败") def regist(self):
uname = input("注册用户名>>>")
upwd = input("注册密码>>>")
u = User(uname, upwd) # 创建用户 把User的类强行赋值了一波
# 把用户写入到文件中
f = open("info", mode="a", encoding="utf-8")
f.write(u.username+"_"+u.password+"\n")
f.flush()
f.close() def run(self): # 运行
# 调用两次注册
self.regist() # 自己类中的方法互相调用. 用self调用
# self.regist() # 自己类中的方法互相调用. 用self调用
# 一次登录
# self.login() # if __name__ == '__main__': # 当前py文件如果是启动文件. 执行这里的代码
obj = Account()
obj.run()

python 面向对象(一)初识面向对象的更多相关文章

  1. Python 入门 之 初识面向对象

    Python 入门 之 初识面向对象 1.初识面向对象编程 (核心--对象) (1)观察以下代码: # 面向过程编程 s = "alexdsb" count = 0 for i i ...

  2. python之路--初识面向对象

    一 . 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大 ...

  3. python之路----初识面向对象(二)

    类命名空间与对象.实例的命名空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量 动态属性就 ...

  4. 【学习笔记】--- 老男孩学Python,day16-17 初识面向对象,类名称空间,查询顺序,组合

    面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复 ...

  5. Python之面向对象之初识面向对象

    初始面向对象 一.面向过程:面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点:极大地降低了写成学的复 ...

  6. 巨蟒python全栈开发-第16天 核能来袭-初识面向对象

    一.今日内容总览(上帝视角,大象自己进冰箱,控制时机) #转换思想(从面向过程到面向对象) 1.初识面向对象 面向过程: 一切以事物的发展流程为中心. 面向对象: 一切以对象为中心,一切皆为对象,具体 ...

  7. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  8. python 全栈开发,Day19(组合,组合实例,初识面向对象小结,初识继承)

    一.组合 表示的一种什么有什么的关系 先来说一下,__init__的作用 class Dog: def __init__(self, name, kind, hp, ad): self.name = ...

  9. python基础(23):面向过程与面向对象的优劣、初识面向对象

    1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...

随机推荐

  1. 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型;

    导航目录: Newtonsoft.Json 概述 一:Newtonsoft.Json 支持序列化与反序列化的.net 对象类型:    二:C#对象.集合.DataTable与Json内容互转示例: ...

  2. 【XSY2708】hack 网络流

    题目描述 给你一个图,每条边有一个权值.要求你选一些边,满足对于每条从\(1\)到\(n\)的路径上(可以不是简单路径)有且仅有一条被选中的边.问你选择的边的边权和最小值. \(n\leq 100\) ...

  3. Codeforces访问提速攻略(小技巧)

    update 这篇文章已废,因为有了 http://m1.codeforces.com codeforces是不是很慢呢?反正蒟蒻打比赛的时候经常几分钟打不开题面然后就被吊打了... 于是几番周折整理 ...

  4. 自学华为IoT物联网之路

    自学华为IoT物联网之路 01 自学华为IoT物联网_01 物联网概述 02 自学华为IoT物联网_02 常见物联网通信技术 03 自学华为IoT物联网_03 公共事业物联网常见问题及解决方案 04  ...

  5. 【BZOJ4784】[ZJOI2017]仙人掌(Tarjan,动态规划)

    [BZOJ4784][ZJOI2017]仙人掌(Tarjan,动态规划) 题面 BZOJ 洛谷 题解 显然如果原图不是仙人掌就无解. 如果原图是仙人掌,显然就是把环上的边给去掉,变成若干森林连边成为仙 ...

  6. luogu P4299 首都

    题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失, ...

  7. [NOI2005]月下柠檬树(计算几何+积分)

    题目描述 李哲非常非常喜欢柠檬树,特别是在静静的夜晚,当天空中有一弯明月温柔 地照亮地面上的景物时,他必会悠闲地坐在他亲手植下的那棵柠檬树旁,独自思 索着人生的哲理. 李哲是一个喜爱思考的孩子,当他看 ...

  8. Codeforces Round #512 D - Vasya and Triangle

    D - Vasya and Triangle #include<bits/stdc++.h> using namespace std; #define LL long long LL gc ...

  9. go语言通道详解

    https://www.ardanlabs.com/blog/2017/10/the-behavior-of-channels.html Introduction When I started to ...

  10. js常用的正则表达式

    一.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ ...