关于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 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- 垂直打击之JVM剖析
让Java应用程序运行是一回事,但让他们跑得快就是另外一回事了.在面对对象的环境中,性能问题就像来势凶猛的野兽.但JVM的复杂性将性能调整的复杂程度增加了一个级别.这里Refcard涵盖了JVM in ...
- Django之MVC和MTV
一. MVC MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心(比如数据库记录列表). ...
- Java 安全套接字编程以及keytool 使用最佳实践
概述 利用 Java 的 JSSE(Java Secure Socket Extension)技术,我们可以方便的编写安全套接字程序,关于 JSSE 的介绍,可以参阅 Oracle 网站提供的 JSS ...
- Could not complete request
Could not complete request com.alibaba.dubbo.rpc.RpcException: Forbid consumer 10.254.1.26 access se ...
- MySQL实现排名并查询指定用户排名功能
表结构: CREATE TABLE test.testsort ( id ) NOT NULL AUTO_INCREMENT, uid ) COMMENT '用户id', score , ) DEFA ...
- 这五件事,二次SaaS创业的老炮儿都在做(转)
在我看来,我们现在正处在SaaS公司发展过程中的第三代.第一代SaaS公司有Salesforce.Netsuite和Webex等.紧接着兴起的第二代SaaS公司大多都是利用Salesforce或其他网 ...
- linux下 GCC编译链接静态库&动态库
静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 ...
- 用C++调用tensorflow在python下训练好的模型(centos7)
本文主要参考博客https://blog.csdn.net/luoyexuge/article/details/80399265 [1] bazel安装参考:https://blog.csdn.net ...
- bzoj 2084 Antisymmetry - Manacher
题目传送门 需要高级权限的传送门 题目大意 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串. 问给定长度为$n$的一个01串有多少个子串是反对称的 ...
- CIL锁,GIL与线程池的区别,进程池和线程池,同步与异步
一.GIL锁 什么是GIL? 全局解释器锁,是加在解释器上的互斥锁 GC是python自带的内存管理机制,GC的工作原理:python中的内存管理使用的是应用计数,每个数会被加上一个整型的计数器,表示 ...