python修炼第六天

越来越难了....现在啥也不想说了,撸起袖子干。

1 面向对象

先来个例子:

比如人狗大战需要有狗,人所以创建两个类别模子def Person(name,sex,hp,dps):    dic = {"name":name,"sex":sex,"hp":hp,"dps":dps,"bag",[]}    return dic

def Dog(name,kind,hp,dps):    dic = {"name":name,"kind":sex,"hp":hp,"dps":dps}    return dic

alex = Person("alex","geil")ha2 = Dog("","",)

造模子  ---面向对象规范了一个类别

概念:类 具有相同属性和相同动作的一类事物,组成一个类对象 具体的某一个具有实际属性 和具体动作的一个实体类是抽象的,对象是具体的

类的语法:类:    1 定义:        class 类名:           静态属性 = None           def 动态属性(self):                pass    2 类的第一个功能;查看        # 只要是写在类名中的名字,不管是变量还是函数名,都不能在类的外部直接调用        # 只能通过类名来使用:类名.静态属性            可以修改静态属性                类名.静态属性 = 345            可以增加静态属性                类名.静态属性2 = "abc"            可以删除静态属性                del 类名.静态属性2

动态属性:            定义动态属性时要加个self            def func(self):                print("--->",self)            类名可以查看某个方法,但是一般情况下 我们不直接使用类名来调用方法            而是使用对象来调用方法。

3 类的第二个功能:实例化(创造对象)        class Person:pass        alex = Person()        # 对象 = 类名()  类名加上括号就是实例化,        在实例化的过程中,发生了很多事情是外部看不到的步骤:            1 创建了一个对象            2 自动调用__init__方法            3 这个被创造的对象会被当作一个实际参数传到__init__方法中,并且传给第一个参数self            4 然后执行init方法中的内容            5 自动的吧self作为返回值,返回给实例化的地方

__dict__ # 记录了必要的默认值之外,还记录了程序员在类中定义的所有名字            print(alex.__dict__)            alex.__dict__["name"] = "alex"            alex.__dict__["hp"] = "alex"            alex.__dict__["dps"] = "alex"            可以简写为:            alex.name = "alex"            alex.hp = 250            alex.dps = 5

初始化方法:        上面是在类外面创建对象的属性,能不能在类里面直接生成属性?        这个被创造的对象会被当作一个实际参数传到__init__方法中,并且传给第一个参数self        能不能这样:alex = Person("alex","boy",250,5)         class Person:            def __init__(self,name,hp,dps):                self.name = name                self.hp = hp                self.dps = dps          alex = Person("alex",250,5)          print(alex.__dict__)          print(alex.name)

对象名.方法名  相当于调用类的函数,同时第一个参数是对象名,第二个参数是

当一个类创建一个对象的时候,就产生了一个这个实例和类之间的联系        可以通过实例 对象找到实例化他的类。        但是类无法找到他实例化了多少个对象。        所以:        对象可以访问类的空间        类无法访问对象的空间

命名空间问题: 类命名空间与对象实例的命名空间        alex.country = "印度人"        在访问变量的时候,都先使用自己的命名空间中的变量,如果自己的空间中没有        再到类的空间去找        在使用对象修改静态变量的过程中,相对于在自己的空间中创建了一个新的变量

alex.country[0] = "印度人"        在类的静态变量的操作中,应该使用类名来直接进行操作。就不会出现乌龙问题

思考题        创建一个类,能够计算这个类创建了多少个实例

组合        一个类的对象,作为另外一个类的属性        比如 人有武器             圆环有圆

2 面向对象的三大特性

1 继承 占了2/1    为什么会有继承: 是为了解决代码冗余的问题。    怎么继承?    单继承:        class Parent:            pass        class sun(Parent):    这就代表sun这个类 继承Parent类            pass        产生很多名词:父类,基类,超类 --- parent类        子类 派生类 ----- sun类

多继承,有多个父类:        class Parent1:pass        class Parent2:pass        class sun(Parent1,Parent2):pass

先找对象的内存空间,再找创建这个对象的类的内存空间,如果还没有 再找创建这个类的父类内存空间。    class Animal:        def __init__(self,name,hp,dps)            self.name = name            self.hp = hp            self.dps = dps        def cat()            print("%s吃药回血了",%self.name)

class  Person(Animal):        def __init__(self,name,hp,dps,sex)            Animal.__init__(self,name,hp,dps)   # 或者写为 super().__init__(name,hp.dps) ,但是如果是多继承要写这个。            self.sex = sex   # 派生属性        def attack(self):            pass

class Dog(Animal):        def __init__(self,name,hp,dps,kind)            Animal.__init__(self,name,hp,dps)            self.kind = kind        def bite():            pass

面试题:        class Foo;            def __init__(self):                self.func()            def func(self):                print("in Foo")        class Son(Foo):            def func(self):                print("in Son")        Son()       # 先调用self自己的方法。所以是in Son

多继承:        钻石继承问题:                    A  4                  /   \                /       \            2  B           C  3                \        /                  \    /               1    D        优先级:D,B,C,A

小乌龟模型:                   A  6                 /   \                /      \            3  B       C  5               |       |               |       |            2  D       E  4                \     /                 \   /                   F  1        优先级:F,D,B,E,C,A        遍历算法 : 广度优先算法    python3 都遵循广度优先算法

python3有2种类    1 经典类 Python3已经灭绝了,在python2中还存在,在py2中只要程序员不主动继承object,这个类就是经典类        就遵循深度优先算法。 一条道走到黑。

2 新式类 Python3所有的类都是新式类,所有新式类都继承自object--- 在多继承成中遵循广度优先算法。

super注意:    在单继承中 super就是找父类    在多级继承 super的轨迹 是根据整个模型的起始点而展开的一个广度优先循序,遵循mro规则

抽象类与接口类 主要是针对java的,略

2 多态    在Python当中,处处都是多态。 略 还没讲

3 封装  略 还没讲

原文地址:https://www.cnblogs.com/liyunjie/p/9059748.html

时间: 2024-11-04 09:14:09

python修炼第六天的相关文章

python学习第六天 - 列表(数组)

python当中的数组与java,c不太一样,数组相当于一个列表,一个列表中可以有,整型,字符串,浮点型等等. 定义格式如下: >>> list = [123,'小甲鱼',3.14] >>> list [123, '小甲鱼', 3.14] 介绍几种向列表中添加元素的方法 1.append() :向列表中增加新的元素,一次只能添加一个元素,默认添加到列表的末尾 >>> list.append('黑夜') >>> list [123, '

python基础第六天

Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false. Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句-- else: 执行语句-- 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围. el

据廖雪峰python3教程----python学习第六天

dict Python内置了字典,dict全程dictionary,在其他语言中也称为map,使用 键-值(key-value)储存,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用 list 实现,需要两个 list: >>> name = ['xiaoming','xiaohong','xiaolan'] >>> scores = [90,75,59] 给定一个名字,要查找对应的成绩,就要在names中找到对应的位置,再从scores取出对

Python学习第六天----Linux内存管理、进程管理、RPM包安装管理及源码安装软件

Linux内存管理.进程管理.RPM包安装管理及源码安装软件 一.交换分区     交换分区其实就相当于Windows系统下的虚拟内存的概念,当物理内存不够用的时候,由操作系统将硬盘的一块区域划分出来作为内存使用.具体使用方法如下:      [[email protected] ~]# fdisk -l 磁盘 /dev/sdb:16.1 GB, 16106127360 字节,31457280 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):5

Python学习第六天

模块: shutil 模块: 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中,可以部分内容 1 def copyfileobj(fsrc, fdst, length=16*1024): 2 """copy data from file-like object fsrc to file-like object fdst""" 3 while 1:

python修炼7----迭代器

迭代器 -------------------------------------------------------------------------------- 充电小知识 1.yield--->自定义函数中只要出现y写了点就说明函数已经是一个Generator.    yield--->m=yield 5  131 可作为表达式进行赋值,此刻m的值是131,5是def定义的函数返回的值    yield--->next()   函数被调用后必须经过.__next__()方法执行

Python的第六天

常用模块的学习 一.time & datetime模块 时间相关的操作,时间有三种表示方式: 时间戳               1970年1月1日之后的秒,即:time.time() 格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d') 结构化时间          元组包含了:年.日.星期等... time.struct_time    即:time.localtime() print time.time() print ti

我的python学习--第六天

一.pickle模块 python的pickle模块实现了基本的数据序列和反序列化.通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储:通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象. 1.pickle模块有很多方法,这里主要讲的是dump和load方法: 1.1.pickle.dump():将字典格式的数据以二进制格式保存到文件中 >>> import pickle                            

Python基础-第六天-面向对象编程

本篇内容 1.面向对象编程介绍 2.类的定义及各部分的介绍 3.属性 4.方法 5.面向对象的特性-封装 6.面向对象的特性-继承 7.面向对象的特性-多态 8.新式类和经典类 一.面向对象编程介绍 1.编程的原则 无论用什么编程范式来编程都要记住的原则是,避免写重复代码,代码要易扩展.一定要遵循可读性好.易扩展的原则. 2.面向对象编程(Object-Oriented Programming)介绍 OOP编程的主要作用是使代码修改和扩展变的更容易: 面向对象编程是利用类和对象来帮助我们实现功能