主要内容:
- 1. 面向对象和面向过程
- 2. 面向对象如何编写
- 3. 面向对象三大特征
1. 面向对象和面向过程
(1) 面向过程:核心是"过程",事情的发展即"过程",或者解决问题的执行步骤即过程,该编程思想就是论事,就问题即问题,是机械式的不可倒退机制
(2) 面向对象: 核心是"对象",具有相同属性和动作的结合体即对象.面向对象思维即是以对象为中心,自己来操控对象而解决问题,此时操纵的是一个事物的个体,具体的某一个事物.
2. 面向对象如何编写
对象是具有相同属性和动作的结合体,所以我们用类来描述一个对象, 用"对象.特征"给对象设置属性.
class Movie: #创建类 print("电影出版") pass a = Movie() #创建一个电影 a.genre = "剧情" a.language="国语" a.name="少林足球" a.time="2H" print(a.genre ) print(a.language ) print(a.name) print(a.time)
把电影的信息如果写在类里, 而且电影每部都具有上面特征,所以可以写在类里,在python中我们可以是用__init__(self) 函数给对象进行初始化操作, 这个函数(方法)被称为构造函数(方法).
class Movie: #创建类 def __init__(self,genre,language,name,time): # self表示当前类的对象,当前你创建的是谁,谁来访问的这个方法.那这个self就是谁. self.genre=genre self.language=language self.name=name self.time=time a = Movie("剧情","国语","少林足球","2H") print(a.genre) print(a.language) print(a.name) print(a.time)
属性设置完了,此时还需要对这个个体特有的动作进行编写,用函数来实现,在面向对象编程中,函数被称做方法,只不过这个方法写起来比正常的方法多⼀个参数self.
class Movie: def __init__(self,genre,language,name,time): # print("电影出版") self.genre=genre self.language=language self.name=name self.time=time def play(self): print("%s在美国上映" % self.name) a = Movie("剧情","国语","少林足球","2H") a.play()
总结: 类与对象的关系: 类是对事物的总结. 抽象的概念, 类用来描述对象, 对象是类的实例化的结果,对象能执行哪些方法,都由类来决定. 类中定义了什么,对象就拥有什么
3.面向对象的三大特征
面向对象三大特征: 封装, 继承, 多态. 只要是面向对象编程语言. 都有这三个特征.
(1)封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数, 对象,打包成模块,这都属于封装的思想. 具体的情况具体分析.
(2)继承: 子类可以自动拥有父类中除了私有属性外的其他所有内容.
class Pet: def __init__(self, name): self.name = name def eat(self): print("吃,.....") def sleep(self): print("睡") class Cat(Pet): def catchMouse(self): print("%s喜欢抓老鼠" % self.name) class Dog(Pet): def chaijia(self): print("狗会拆家") # x是一种y的时候. x继承y
在python中, 一个类可以同时继承多个父类.
class Foo: def play(self): print("Foo中的play") def func(self): print("我是爹") class Foo2: def money(self): print("干爹给钱") def play(self): print("Foo2中的play") class Bar(Foo, Foo2): # 继承 子类, MRO算法. C3算法 pass obj = Bar() obj.money() obj.func() obj.play()
(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自带多态.
Homework
1.实现用户注册和登录
class Account: def __init__(self): self.user_list = [] # 数据源 def login(self): print("欢迎来到登录环节") username = input("请输入用户名: ") password = input("请输入密码:") for u in self.user_list: if u.name == username and u.pwd == password: print("登录成功") return else: print("登录失败") def register(self): print("欢迎来到注册环节") uname = input("请输入用户名") pwd = input("请输入密码") u = User(uname, pwd) self.user_list.append(u) def run(self): while 1: print("1. 注册") print("2. 登录") num = input("请输入你要执行的操作(Q退出):") if num == "1": self.register() elif num == "2": self.login() elif num.upper() == "Q": print("退出") break else: print("你是不是傻") obj = Account() obj.run()
2.1. 补充代码实现:
user_list = []
while
True:
user = input(“请输入用户名:”)
pwd = input(“请输入密码:”)
email = input(“请输入邮箱:”)
while循环提示用户输入:用户名、密码、邮箱
为每个用户创建一个对象,并添加到列表中。
当列表中添加3个对象后,跳出循环并以此循环打印所有用户的姓名和邮箱
class User: def __init__(self, username, password, email): self.username = username self.password = password self.email = email user_list = [] for i in range(3): user = input("请输入用户名:") pwd = input("请输入密码:") email = input("请输入邮箱:") u = User(user, pwd, email) user_list.append(u) else: for u in user_list: print("我叫%s, 邮箱是:%s" % (u.username, u.email))