Python Day22

面对对象1

面向过程 与 面向对象:

面向过程

  ~面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

  

优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向对象

  ~面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。

优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题即便是上帝也无法预测最终结果。于是我们经常看到一个游戏人某一参数的修改极有可能导致阴霸的技能出现,一刀砍死3个人,这个游戏就失去平衡。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

一 类和对象

 1 什么是类:一堆事物中拥有的共同功能和属性,比如说人类,动物类等等

 2 什么是对象:在类下面的调用者就是对象,比如说动物是一类,他下面的对象有猪,狗,猫等等

在python中以为皆为对象,而类型的本身就是一个类

二 创建类和对象

**基本格式:

class 类名:
    类属性 = ‘‘    #类属性、静态属性
    def __init__(self,参数1,参数2):
        self.a = 参数1
        self.b = 参数2

    def 方法(self):pass

参数1 = 1
参数2 = 2
对象名 = 类名(参数1,参数2)   #实例化

#类名
#类名.类属性
#类名.类方法  #但不能调用

#对象名
#对象名.对象属性  类属性
#对象名.方法()    调用方法,方法也叫动态属性

**创建对象和调用类

对象=类名(这里写上你对应的参数值,self不用传值)
调用方法:
对象.函数名()

 在这里每一个类里面都必须要有一个__init__(self)这个函数的功能。他的功能是实例化一个对象

 类属性属于静态属性,而函数属性就属于动态的属性

类:类名.类属性

  类名.类方法    (但不能调用)

对象:对象名.对象属性  对象名.类属性

   对象名.方法()   (调用方法,也叫做调用动态属性) 

例子

class People:
    def __init__(self,name,age,sex=‘男‘):
        self.name=name
        self.age=age
        self.sex=sex
    def kanchai(self):
        print(‘%s,%s岁,%s,上山去砍柴‘%(self.name,self.age,self.sex))
        print(‘%s,%s岁,%s,开车去东北‘ % (self.name, self.age, self.sex))
        print(‘%s,%s岁,%s,最爱大保健‘ % (self.name, self.age, self.sex))
dui1=People(‘小明‘,18)
dui5=People(‘老王‘,80)
dui1.kanchai()
dui5.kanchai()

输出结果

小明,18岁,男,上山去砍柴
小明,18岁,男,开车去东北
小明,18岁,男,最爱大保健
老王,80岁,男,上山去砍柴
老王,80岁,男,开车去东北
老王,80岁,男,最爱大保健
class People:
    def __init__(self,name,sex,aggr):
        self.name=name
        self.sex=sex
        self.aggr=aggr
        self.blood=20000
    def attack(self,person):
        print(‘%s attack %s‘%(self.name,person.name))
        person.blood-=self.aggr
        print(person.blood)
alex=People(‘alex‘,‘female‘,10000)
egon=People(‘egon‘,‘male‘,20000)
alex.attack(egon)
egon.attack(alex)

输出结果

alex attack egon
10000
egon attack alex
0
class People:
    def __init__(self,name,aggr,sex = ‘男‘):
        self.name = name
        self.aggr = aggr
        self.blood = 20000
    def attack(self,dog):
        print(‘%s attack %s‘%(self.name,dog.name))
        dog.blood -= self.aggr
        print(dog.blood)
class Dog:
    def __init__(self,name,aggr,sex = ‘公‘):
        self.name = name
        self.aggr = aggr
        self.blood = 20000
    def yao(self,person):
        print(‘%s yao %s‘%(self.name,person.name))
        person.blood -= self.aggr
        print(person.blood)
alex = Dog(‘alex‘,1000)
egon = People(‘egon‘,10000)
alex.yao(egon)
egon.attack(alex)

输出结果

alex yao egon
19000
egon attack alex
10000

 什么叫做面向对象之间的交互:在多个面向对象之间互相的调用,就叫在面向对象的交互

计算面积和周长:

from math import pi
class Ciecle:
    def __init__(self,r):
        self.r = r
    def area(self):
       return pi*self.r**2
    def round(self):
        return 2*pi*self.r
c1 = Ciecle(10)
print(c1.area())
print(c1.round())

输出结果

314.1592653589793
62.83185307179586
时间: 2024-10-05 07:36:33

Python Day22的相关文章

Python基础day-22[面向对象:反射,其他命令参数]

反射: 什么是反射: 主要是指程序可以访问,检测和修改本身状态或行为的一种能力. Python中的一切事物都是对象. 四个实现自省的函数: 类和对象均可以使用. class A: name = 'abc' age = 19 #类的使用 print(hasattr(A,'n1me')) #判断类是否含有某个属性 hasattr(类或者对象名,属性名) print(getattr(A,'name')) #获取对应属性的属性值 getattr(类或者对象名,属性名,出错返回的内容) <----出错返回

Python开发基础-Day22反射、面向对象进阶

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象,如果是返回True 1 class Foo(object): 2 pass 3 obj = Foo() 4 print(isinstance(obj, Foo)) issubclass(sub, super)检查sub类是否是 super 类的派生类,如果是返回True 1 class Foo(object): 2 pass 3 cla

Python全栈之路Day22

初次编辑2017年10月28日,星期六 摘要一. 上节课复习二. 协程函数初始化装饰器三. send实现爬网页四. 面向过程的程序设计五. 列表生成式六. 三元表达式七.生成器表达式八. 声明式编程作业今日总结 摘要 引用:百度 列表生成式 生成器表达式 面向过程编程 递归 一. 上节课复习 可迭代的:对象有__iter__方法的都是可迭代的对象 迭代器:对象 .iter()得到的结果就是迭代器 迭代器的特征: 迭代器.next()取下一个值 优点: 提供了一种统一的迭代对象的方式,不依赖于索引

python学习点滴记录-Day22

文件上传 form表单文件操作 ajax文件操作 头像上传 默认头像覆盖 预览 注册页面,form钩子,清空之前的error信息 博客首页,初始化数据,首页样式调试. auth实现登录与注册 个人中心左侧的昵称 园龄 头像:分类归档.标签归档.时间归档: 各个url跳转 文章详情页 点赞 不能重复点赞, 事物 def diggit(request): from django.db.models import F from django.db import transaction state={"

Python基础第14天

常见模块(1) 一:time模块 import time #--------------------------我们先以当前时间为准,让大家快速认识三种形式的时间 print(time.time()) # 时间戳:1487130156.419527 print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2017-02-15 11:40:53' print(time.localtime()) #本地时区的struct_time print(tim

Python上下文管理

1 import queue 2 import contextlib 3 import time 4 @contextlib.contextmanager 5 def worker_state(xxx,val): 6 xxx.append(val) 7 print("before",xxx) 8 try: 9 time.sleep(1) 10 yield 11 finally: 12 xxx.remove(val) 13 print("after",xxx) 14

Python面向对象编程(四)

1.多态 多态的概念虽然现在才说,但是我们一直在用.多态就是多种形态的意思,动物都猫,狗,猪等等,这些都是动物的多种形态. 反映在Python中,多态就意味着就算不知道变量所引用的对象类型是什么,也能对它进行操作.比如序列类型有计算长度的方法len(),那我们拿到一个序列类型x,我们不需要知道x是什么类型,只需要知道它是序列类型,那我们就可以用len(x)的方法计算x的长度.这就是多态性 当然我们学过一个内置函数isinstance(),可以用它来判断数据类型,但是这可不符合多态优美的特性 2.

python 作业

Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与寄存器,内核态与用户态及如何切换 存储器系列,L1缓存,L2缓存,内存(RAM),EEPROM和闪存,CMOS与BIOS电池 磁盘结构,平均寻道时间,平均延迟时间,虚拟内存与MMU 磁带 设备驱动与控制器 总线与南桥和北桥 操作系统的启动流程 应用程序的启动流程 day02 作业要求一:整理操作系统博客 为何

Python学习(十二)—— 常见模块

常见内置模块 time模块 时间戳(单位是秒,代表由1970年元旦凌晨至今过去的时间),常用于计算 .time(): 1 import time 2 #时间戳,单位是s 3 print(time.time()) 4 # 1583246063.46606 结构化时间 (显示当地当前的精确时间 年月日...).localtime() 1 print(time.localtime()) 2 # time.struct_time(tm_year=2020, tm_mon=3, tm_mday=3, tm