pyhton 类-对象

介绍

类是一种抽象的类型,而对象是这种类型的实例。
一个类可以有属于它的函数,这种函数被称为类的“方法”。
一个类/对象可以有属于它的变量,这种变量被称作“域”。
域根据所属不同,又分别被称作“类变量”和“实例变量”。

举个现实的例子:
“笔”作为一个抽象的概念,可以被看成是一个类。而一支实实在在的笔,则是“笔”这种类型的对象
继续笔的例子。一个笔有书写的功能,所以“书写”就是笔这个类的一种方法。
每支笔有自己的颜色,“颜色”就是某支笔的域,也是这支笔的实例变量。

而关于“类变量”,我们假设有一种限量版钢笔,我们为这种笔创建一种类。而这种笔的“产量”就可以看做这种笔的类变量。因为这个域不属于某一支笔,而是这种类型的笔的共有属性。

域和方法被合称为类的属性。

通过dir()方法可以查看一个类/变量的所有属性:
dir(s)


类的创建

#创建类
class MyClass:
    pass

#创建类的实例 即对象
mc = MyClass()
print mc
<__main__.MyClass instance at 0x7fd1c8d01200>

类方法及类变量

#创建类变量name及类方法sayHi
class MyClass:
    name = 'Sam'

    def sayHi(self):
        print 'Hello %s' % self.name


mc = MyClass()
print mc.name
mc.name = 'Lily'
mc.sayHi()

注意到,类方法和我们之前定义的函数区别在于,第一个参数必须为self。而在调用类方法的时候,通过“对象.方法名()”格式进行调用,而不需要额外提供self这个参数的值。self在类方法中的值,就是你调用的这个对象本身。


面向对象

对比两种方法,面向过程把数据和处理数据的计算全部放在一起,当功能复杂之后,就会显得很混乱,且容易产生很多重复的代码。而面向对象,把一类数据和处理这类数据的方法封装在一个类中,让程序的结构更清晰,不同的功能之间相互独立。这样更有利于进行模块化的开发方式。

继承
比如车的例子,可以新增汽车,自行车等子类。在每个子类中,可以分别添加各自独有的属性。

创建一个叫做Vehicle的类,表示某种车,它包含了汽车和自行车所共有的东西:速度,行驶的方法。然后让Car类和Bike类都继承这个Vehicle类,即作为它的子类。在每个子类中,可以分别添加各自独有的属性。

Vehicle类被称为基本类或超类,Car类和Bike类被称为导出类或子类。

class Vehicle:
    def __init__(self, speed):
        self.speed = speed

    def drive(self, distance):
        print 'need %f hour(s)' % (distance / self.speed)


class Bike(Vehicle):
    pass

class Car(Vehicle):
    def __init__(self, speed, fuel):
        Vehicle.__init__(self, speed)
        self.fuel = fuel

    def drive(self, distance):
        Vehicle.drive(self, distance)
        print 'need %f fuels' % (distance * self.fuel)

代码解释:

init函数会在类被创建的时候自动调用,用来初始化类。它的参数,要在创建类的时候提供。于是我们通过提供一个数值来初始化speed的值。

class定义后面的括号里表示这个类继承于哪个类。Bike(Vehicle)就是说Bike是继承自Vehicle中的子类。Vehicle中的属性和方法,Bike都会有。因为Bike不需要有额外的功能,所以用pass在类中保留空块,什么都不用写。

Car类中,我们又重新定义了init和drive函数,这样会覆盖掉它继承自Vehicle的同名函数。但我们依然可以通过“Vehicle.函数名”来调用它的超类方法。以此来获得它作为Vehicle所具有的功能。注意,因为是通过类名调用方法,而不是像之前一样通过对象来调用,所以这里必须提供self的参数值。在调用超类的方法之后,我们又给Car增加了一个fuel属性,并且在drive中多输出一行信息。


init()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二个原因是init()参数值可以有多种形式。


class Suit:
  def __init__(self, name, symbol):
    self.name= name
    self.symbol= sex

example=Suit('Jack','Male')

1.定义 init方法,这里有三个参数,这个self指的是一会创建类的实例的时候这个被创建的实例本身(例中的example)

2.等号左边的那个name是实例的属性,右边那个是方法init的参数,两者是不同的

3.example为Suit类的一个实例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本文档格式为word文档,包含了相应的目录结构。 Python教程 1 关于作者 2 Python简介 2 1 安装Python 5 1.1 Python解释器 8 2 第一个Python程序 9 2.1 使用文本编辑器 10 2.2 输入和输出 14 3 Python基础 17 3.1 数据型和变量 18 3.2 字符串和编码 25 3.3 使用list和tuple 34 3.4 条件判断 39 3.5 循环 43 3.6 使用dict和set 45 4 函数 50 4.1 调用函数 52 4.2 定义函数 54 4.3 函数的参数 58 4.4 递归函数 70 5 高级特性 73 5.1 切片 73 5.2 迭代 77 5.3 列表生成式 79 5.4 生成器 81 5.5 迭代器 88 6 函数式编程 90 6.1 高阶函数 91 6.1.1 map/reduce 94 6.1.2 filter 97 6.1.3 sorted 100 6.2 返回函数 101 6.3 匿名函数 105 6.4 装饰器 106 6.5 偏函数 110 7 模块 112 7.1 使用模块 114 7.2 安装第三方模块 118 8 面向对象编程 120 8.1 和实例 122 8.2 访问限制 126 8.3 继承和多态 128 8.4 获取对象信息 134 8.5 实例属性和属性 141 9 面向对象高级编程 143 9.1 使用__slots__ 143 9.2 使用@property 146 9.3 多重继承 149 9.4 定制 154 9.5 使用枚举 164 9.6 使用元 167 10 错误、调试和测试 175 10.1 错误处理 176 10.2 调试 186 10.3 单元测试 191 10.4 文档测试 196 11 IO编程 200 11.1 文件读写 201 11.2 StringIO和BytesIO 205 11.3 操作文件和目录 207 11.4 序列化 210 12 进程和线程 215 12.1 多进程 217 12.2 多线程 225 12.3 ThreadLocal 232 12.4 进程 vs. 线程 235 12.5 分布式进程 237 13 正则表达式 243 13.1 常用内建模块 249 13.1.1 datetime 249 13.1.2 collections 254 13.1.3 base64 258 13.1.4 struct 260 13.1.5 hashlib 262 13.1.6 itertools 267 13.1.7 XML 270 13.1.8 HTMLParser 272 13.1.9 urllib 274 14 常用第三方模块 278 14.1 PIL 278 15 virtualenv 282 16 图形界面 284 17 网络编程 288 17.1 CP/IP简介 289 17.2 TCP编程 291 17.3 UDP编程 296 18 电子邮件 298 18.1 SMTP发送邮件 300 18.2 POP3收取邮件 308 19 访问数据库 314 19.1 使用SQLite 318 19.2 用MySQL 321 19.3 使用SQLAlchemy 324 20 Web开发 329 20.1 HTTP协议简介 330 20.2 HTML简介 337 20.3 WSGI接口 341 20.4 使用Web框架 347 20.5 使用模板 352 21 异步IO 357 21.1 协程 359 21.2 syncio 362 21.3 async/await 366 21.4 aiohttp 367 22 实战 369 22.1 Day 1 - 搭建开发环境 372 22.2 Day 2 - 编写Web App骨架 374 22.3 Day 3 - 编写ORM 375 22.4 Day 4 - 编写Model 385 22.5 Day 5 - 编写Web框架 390 22.6 Day 6 - 编写配置文件 396 22.7 Day 7 - 编写MVC 398 22.8 Day 8 - 构建前端 399 22.9 Day 9 - 编写API 410 22.10 Day 10 - 用户注册和登录 412 22.11 Day 11 - 编写日志创建页 423 22.12 Day 12 - 编写日志列表页 432 22.13 Day 13 - 提升开发效率 439 22.14 Day 14 - 完成Web App 443 22.15 Day 15 - 部署Web App 445 22.16 Day 16 - 编写移动App 454 23 FAQ 456 24 期末总结 458

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值