关于python的面向对象
一,面向对象
1..面向对象的过程:一切以事物的流程为核心,核心是过程二字,过程是指解决问题的步骤,
是一种机械是的编程思维
优点:负责的问题流程化,编写相对简单 缺点:可扩展性能差
2.面向对象一切以对象为中心
优点:可扩展性强 缺点:编程复杂度高于面向过程
面向对象的编写
class Car:
pass
c=Car()
c.lunzi="圆的"
c.red='骚红色'
c.pailiang="6.31"
c.pai="粤b无数"
c.price="200000"
print(c.price) b=Car()
b.yanse="绿色"
b.year="10年"
b.price="100万"
b.paizi="宝马"
b.排量="5.42"
print(b.排量)
class Computer: # 构造方法. 在创建的对象的时候由系统自动访问这个方法
# self: 自己. 自身. 类的对象. 当前正在创建的对象
def __init__(self, pinpai, price, cpu, neicun): # 谁在调用, self就是谁, self 由python自动传递
self.pinpai = pinpai
self.price = price
self.cpu = cpu
self.neicun = neicun # 方法. 该类型的对象能够执行哪些操作
def dayouxi(self, game): # 谁调用的这个方法. self就是谁
# 我用我的self.pinpai的调用. 利用很牛B的self.cpu来完成吃鸡操作
print("我要打游戏, 我要%s" % game) c = Computer("微软",25000,"i9","5T") # 创建对象
c.dayouxi("吃鸡") c2 = Computer("mac book", 22000, "i7", "16G")
print(c2.price) c.pinpai = "神州"
c.price = 100
c.cpu = "赛扬双核"
c.neicun = "1G" c2 = Computer()
c2.pinpai = "小米"
c2.price = 10000
c2.cpu = "I7-8750"
c2.neicun = "1T" print(c2.pinpai) # 小米
print(c.pinpai) # 神州
思考过程:
准备创建类 -> 定义__init__() self.xxx = xxxx
对象能干什么事儿? 方法. def 方法名(self, 参数...) 练习题:
1. 创建⼀个武松. 武松可以打老虎, 杀嫂⼦, 替天⾏道
class HaoHan:
def __init__(self, waihao, name, wuqi, jineng):
self.waihao = waihao
self.name = name
self.wuqi = wuqi
self.jineng = jineng def dalaohu(self):
pass def shasaozi(self):
pass def titianxingdao(self):
pass ws = HaoHan("行者", "武松", "拳头", "王八拳")
ws.dalaohu()
ws.shasaozi()
ws.titianxingdao() lk = HaoHan("黑旋风", "李逵", "双板斧", "旋风斩")
lk.dalaohu()
lk.shasaozi()
lk.titianxingdao() 2. ⽤⾯向对象的思维来模拟LOL⾥的盖伦(英雄)上阵杀敌.
class Tank:
def __init__(self, name, waihao, hp, fy):
self.name = name
self.waihao = waihao
self.hp = hp
self.fy = fy def kang(self):
pass def zhengyishenpan(self):
pass gailun = Tank("盖伦","德玛西亚之力", 5000, 200) 3. 编写和尚类. ⾃⼰⾃由发挥和尚有哪些属性和⽅法.
class HeShang:
def __init__(self, fahao, simiao):
self.fahao = fahao
self.simiao = simiao def nianjing(self):
pass def marray(self):
pass
# 4. ⽤⾯向对象的思维来完成⽤户登录.
class User:
def __init__(self, username, password):
self.username = username
self.password = password def login(self, uname, upws):
if uname == self.username and upws == self.password:
return True
else:
return False
u1 = User("alex", "123")
ret = u1.login(input("请输入你的用户名"), input("请输入密码"))
print(ret)
主语发生了改变
函数式编程. 简单的基本功能还是函数式编程更加好用
面向对象: 如果功能非常复杂的时候.
例一:要把大象装冰箱:面向对象的过程
def open():
print("开门")
def zhuang():
print("装大象")
def close():
print("关门") open()
zhuang()
close()
例二:面向对象:
class DaXiang:
def open(self):
print("开门")
def jinbingxiang(self):
print('进冰箱')
def guanmen(self):
print("关门") dx = DaXiang()
dx.open()
dx.jinbingxiang()
dx.guanmen()
面向对象过程
# alex大战奥特曼
def daZhanAoTeMan(name, wuqi, jineng):
print("%s 使用 %s 配合 %s技能狂怼奥特曼" % (name, wuqi, jineng))
# alex大战哥斯拉
def daZhanGeSiLa(name, wuqi, jineng):
print("%s 使用 %s 配合 %s技能狂怼哥斯拉" % (name, wuqi, jineng))
# alex大战蝙蝠侠
def daZhanBianFuXia(name, wuqi, jineng):
print("%s 使用 %s 配合 %s技能狂怼蝙蝠侠" % (name, wuqi, jineng)) daZhanAoTeMan("alex", "菜刀", "动感光波")
daZhanGeSiLa("alex", "菜刀", "动感光波")
daZhanBianFuXia("alex", "菜刀", "动感光波")
面向对象:对象做主语执行动作
class Person:
def __init__(self, name, wuqi, jineng, taopaoluxian):
# 封装: 对属性的封装.
self.name = name
self.wuqi = wuqi
self.jineng = jineng
self.taopaoluxian = taopaoluxian # 对方法进行封装
def daZhanAoTeMan(self):
print("%s 使用 %s 配合 %s技能狂怼奥特曼" % (self.name, self.wuqi, self.jineng)) # alex大战哥斯拉
def daZhanGeSiLa(self):
print("%s 使用 %s 配合 %s技能狂怼哥斯拉" % (self.name, self.wuqi, self.jineng)) # alex大战蝙蝠侠
def daZhanBianFuXia(self):
print("%s 使用 %s 配合 %s技能狂怼蝙蝠侠" % (self.name, self.wuqi, self.jineng)) a1 = Person("alex", "菜刀", "动感光波", "打车跑")
a1.daZhanAoTeMan()
a1.daZhanBianFuXia()
a1.daZhanGeSiLa()
继承: 子类自动拥有父类中除了私有内容外的其他所有的属性:
例一
class Niu:
def da(self):
print("牛魔王打架很厉害") class HongHaiEer(Niu):
def da(self):
print("喷火") hhl = HongHaiEer()
hhl.da()
例二
多肽:同一对象拥有多种形态
同一个对象. 拥有多种形态 java c++
class Aniaml:
def dong(self):
print("动物可以动") class Cat(Aniaml):
def chi(self):
print("猫喜欢吃鱼") a = Cat()
a.chi() # 站在猫的角度. 可以吃
a.dong() # 站在动物的角度可以动 # 在python中多态的效果感受不够明确
class YaoGuai:
def teng(self):
print("妖怪一定会疼") class ZhiZhuJing(YaoGuai):
def teng(self):
print("蜘蛛精很痛") class HeiXiongJing(YaoGuai):
def teng(self):
print("黑熊精也很疼") class BaiGuJing(YaoGuai):
def teng(self):
print("白骨精骨头很疼") class JinJiaoDaWang(YaoGuai):
def fangundeteng(self):
print("爆炸的疼") class SunWuKong:
def da(self, yg):
yg.teng() # 只要包含了xxx功能的内容都可以试用. 鸭子模型 -> 多态性
# 西游记开始
swk = SunWuKong()
hxj = HeiXiongJing()
swk.da(hxj)
bgj = BaiGuJing()
swk.da(bgj)
zzj = ZhiZhuJing()
swk.da(zzj)
alex = JinJiaoDaWang()
swk.da(alex)
多继承:就近原则:
class Foo1:
def money(self):
print("有钱") class Foo2:
def play(self):
print("玩儿") def money(self):
print("没钱") class Bar(Foo2, Foo1): # MRO c3算法
pass b = Bar()
b.money()
关于python的面向对象的更多相关文章
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python的面向对象3
接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...
- Python的面向对象2
我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...
- Python的面向对象1
今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++ ,Java ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...
- My way to Python - Day05 - 面向对象-思维导图
My way to Python - Day05 - 面向对象 思维导图
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- Python之面向对象一
引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- python基础——面向对象的程序设计
python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- Java中在java.sql.Date的系统时间上加上30天并写入oracle
在java.sql.Date的系统时间上加上30天,并写入oracle 思路:通过 Calendar.getInstance() 获得对象,然后 add() 方法添加 时间,再通过 new java. ...
- org.springframework.jdbc.UncategorizedSQLException
org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException fo ...
- php 采集爬取单个淘宝商品描述,商品属性
下载链接:https://download.csdn.net/download/a724008158/10723448 效果图:
- gcc常用编译选项
“-Wall”选项打开所有最常用到的编译警告,强烈建议打开,可以捕捉到许多在C编程中最常发生的错误. “-o”选项来为可执行文件指定一个不同的输出文件. “-c”用于把源码文件编译成对象文件. 对象文 ...
- Linux pip 命令无法使用问题
Linux pip 命令无法使用问题 pip 命令无法使用,说明 pip 没有安装,我们可以使用终端命令进行安装. sudo apt-get installl python-pip 安装成功之后,可以 ...
- 06: 字典、顺序表、列表、hash树 实现原理
算法其他篇 目录: 1.1 python中字典对象实现原理 1.2 顺序表 1.3 python 列表(list) 1.1 python中字典对象实现原理返回顶部 注:字典类型是Python中最常 ...
- Python中对象的引用与复制
在python进行像b = a这样的赋值时,只会创建一个对a的新引用,使a的引用计数加1,而不会创建新的对象: >>> a = 'xyz' >>> import s ...
- 嵌入式电路中的BUCK VS LDO【转】
本文转载自:http://blog.chinaunix.net/uid-25906157-id-4125916.html 作为一名FAE,才知硬件知识的匮乏.慢慢积累一点儿硬件知识吧!BUCK和LDO ...
- fedora安装了phpmyadmin后, mariadb无法启动?
参考:http://www.linuxidc.com/Linux/2015-10/123945.htm where, which, when,等不但可以用在从句中, 而且可以用在 动词不定式中, 如: ...
- 【做题】BZOJ2342 双倍回文——马拉车&并查集
题意:有一个长度为\(n\)的字符串,求它最长的子串\(s\)满足\(s\)是长度为4的倍数的回文串,且它的前半部分和后半部分都是回文串. \(n \leq 5 \times 10^5\) 首先,显然 ...