面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用。

概述

  • 面向过程:根据业务逻辑从上到下写垒代码
  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强...”

本节学习目标:

  • 创建类和对象
  • 面向对象三大特性:封装、继承、多态
  • 类成员:变量(类变量,实例变量)、方法(普通方法,类方法,静态方法)、属性)
  • 类和对象在内存中的保存情况
  • 类成员修饰符:公有成员xx,私有成员__xx
  • 类的特殊成员:__doc__,__module__,__class__,__init__,__call__,__dict__,__str__

创建类和对象

class Car(object): # 创建类
can_run=True # 类变量 def __init__(self,name): # 构造函数
self.name=name # 实例变量 def run(self):
return '%s run...' %self.name bmw=Car("BMW") # 通过类创建实例对象
print bmw.can_run # 通过实例对象调用类变量
print bmw.run()   # 通过实例变量调用方法

运行结果:

True
BMW run...

面向对象的三大特性:封装、继承、多态

class Person(object):
sex = 'M' def __init__(self, name):
self.name = name def speak(self):
return 'Human can speak...' class Student(Person):
''' Student继承于Person'''
id = 0 # 类变量,公有
__score=60 # 类变量,私有 def __init__(self, name, grade):
super(Student, self).__init__(name)
self.grade = grade # 实例变量
Student.id += 1 # 每创建实例一次,类变量+1
self.id = Student.id # 实例变量 def job(self):
return '%s is leaning in grade %s' % (self.name, self.grade) class Teacher(Person):
def __init__(self, name, course):
super(Teacher, self).__init__(name)
self.course = course # 课程 def job(self):
return '%s is teaching %s' % (self.name, self.course) def speak(self):
''' 重写父类speak 方法'''
return '%s can speak %s' % (self.name, self.course) # 根据Student类创建实例对象s1
s1 = Student('Milton', 1)
print 's1.name:', s1.name # 调用实例s1变量name
print 's1.id:', s1.id
print 's1.job:', s1.job() # 通过实例s1调用类方法
# 继承父类的方法与属性
print 's1.speak:', s1.speak()
print 's1.sex:', s1.sex # 重写父类的方法
t1 = Teacher('Loveyp', 'English')
print 't1.speak:', t1.speak()
# 多态
for p in [Student('Perter', 1), Teacher('Marry', 'English')]:
print p.job()

运行结果:

通过实例对象调用实例变量,类方法,类变量:
s1.name: Milton
s1.id: 1
s1.count: 1
s1.job: Milton is leaning in grade 1
**************************************************
子类s1中继承父类的方法与属性:
s1.speak: Human can speak...
s1.sex: M
**************************************************
子类重写父类的方法:
t1.speak: Loveyp can speak English
******************************
多态:
Perter is leaning in grade 1
Marry is teaching English

类成员:变量(类变量,实例变量)、方法(普通方法,类方法,静态方法)、属性

class Car(object):
count = 0 # 类变量
style = "SUV"
tax = 0.8 def __init__(self, name, money):
self.name = name # 实例变量
self.money = money
Car.count += 1 # 调用类变量 # 普通方法
def run(self):
return '%s run...' % self.name @classmethod # 类方法,类方法中不能使用实例变量
def play_music(cls, song):
return '%s car can playing music %s' % (cls.style, song) @staticmethod # 静态方法,不能直接使用类变量与实例变量
def add_gas(name):
return '%s can add_gas...' % name @property # 将方法设置为属性
def price(self):
return self.money * Car.tax @price.setter
def price(self, money):
self.money = money bmw = Car("BMW", 80)
print "实例对象调用类变量:", bmw.count
print "类直接调用类变量:", Car.count
print "实例对象调用方法:", bmw.run()
print "实例对象调用实例变量:", bmw.name try:
Car.run()
except Exception, e:
print "类直接调用方法失败:", e
aodi = Car("AODI", 100)
print "实例对象调用类变量:", aodi.count
print "类直接调用类变量:", Car.count print "实例对象调用类方法:", aodi.play_music("Hello World")
print "类直接调用类方法:", Car.play_music("ABC") try:
aodi.add_gas()
except Exception, e:
print "静态方法直接引用实例变量:", e
print "静态方法中传入参数:", aodi.add_gas(aodi.name) print "修改属性前访问属性:",aodi.price
aodi.price = 200
print "修改属性后访问属性:",aodi.price

运行结果:

实例对象调用类变量: 1
类直接调用类变量: 1
实例对象调用方法: BMW run...
实例对象调用实例变量: BMW
类直接调用方法失败: unbound method run() must be called with Car instance as first argument (got nothing instead)
实例对象调用类变量: 2
类直接调用类变量: 2
实例对象调用类方法: SUV car can playing music Hello World
类直接调用类方法: SUV car can playing music ABC
静态方法直接引用实例变量: add_gas() takes exactly 1 argument (0 given)
静态方法中传入参数: AODI can add_gas...
修改属性前访问属性: 64.0
修改属性后访问属性: 160.0

类和对象在内存中的保存情况

class Car(object):
count = 0 # 类变量
style = "SUV" def __init__(self, name):
self.name = name # 实例变量
Car.count += 1 # 调用类变量 # 普通方法
def run(self):
return '%s run...' % self.name @classmethod # 类方法,类方法中不能使用实例变量
def play_music(cls, song):
return '%s car can playing music %s' % (cls.style, song) @staticmethod # 静态方法,不能直接使用类变量与实例变量
def add_gas(name):
return '%s can add_gas...' % name bmw = Car("BMW")
bmw.color="white"
aodi = Car("AODI")

 

类成员修饰符:公有成员xx,私有成员__xx

class Car(object):
__count = 0 # 类变量,私有
style="SUV" # 类变量,公有 def __init__(self, name):
self.name = name # 实例变量
Car.__count += 1 # 调用类变量 bmw = Car("BMW")
try:
print bmw.__count
except Exception,e:
print "外部调用类私有变量:",e
print "外部调用类公有变量:",bmw.style

运行结果:

外部调用类私有变量: 'Car' object has no attribute '__count'
外部调用类公有变量: SUV

类的特殊成员:__doc__,__module__,__class__,__init__,__call__,__dict__,__str__

class Car(object):
'''小车模型'''
style = "SUV" # 类变量,公有 def __init__(self, name):
self.name = name # 实例变量
print '__init__ function call...' def __call__(self, *args, **kwargs):
print '__call__ function call...' def __str__(self):
return "this is a nice card!" print "文档注释", Car.__doc__
print "模块名:", Car.__module__
print "类型:", Car.__class__
bmw = Car("BMW")
bmw()
print "类成员:", Car.__dict__
print "实例成员:", bmw.__dict__
print "str 输出:", bmw

运行结果:

文档注释 小车模型
模块名: __main__
类型: <type 'type'>
__init__ function call...
__call__ function call...
类成员: {'__dict__': <attribute '__dict__' of 'Car' objects>, '__module__': '__main__', '__call__': <function __call__ at 0x039098F0>,
'__str__': <function __str__ at 0x03909870>, '__weakref__': <attribute '__weakref__' of 'Car' objects>, 'style': 'SUV',
'__init__': <function __init__ at 0x039098B0>, '__doc__': '\xe5\xb0\x8f\xe8\xbd\xa6\xe6\xa8\xa1\xe5\x9e\x8b'}
实例成员: {'name': 'BMW'}
str 输出: this is a nice card!

***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***

python 面向对象(类)的更多相关文章

  1. python面向对象(类和对象及三大特性)

    类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态   面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  2. python 面向对象(类的特殊成员)

    python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...

  3. python面向对象(类的成员及类方法)

    类的普通成员 字段 方法 属性 类的高级成员 静态字段 静态方法 属性方法   类方法 类成员修饰符 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中, ...

  4. python面向对象——类

    from:http://www.runoob.com/python3/python3-class.html Python3 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在P ...

  5. Python面向对象 --- 类的设计和常见的内置方法

    面向对象:一种基于面向过程的新的编程思想.也就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是算法作为其次,这是对数据一种 ...

  6. python 面向对象类与类之间的关系

    主要内容: 1. 依赖关系 2. 关联关系, 组合关系, 聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那 ...

  7. Python——面向对象(类)的基础疑难点

    相信用Python写def函数大家都信手拈来了,但Python作为面向对象的编程语言,怎么能浪费呢? 那问题来了.什么是类呢?什么是实例?什么是对象?方法是什么??属性又是什么???继承?封装?多态? ...

  8. python面向对象--类

    1.类的概念:简单来说就是一组符合逻辑的参数或者是函数,一个种类.一个模型. 一个类中可以包含任意参数,并且可以定义任意个方法,但类并不是随意的将多个参数或者方法包含在class下,而是创建一个在事物 ...

  9. python: 面向对象:类和对象调用类中的变量和方法

    一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...

随机推荐

  1. 解决ntp的错误:no server can be used,exiting

    台湾地区一台机器进行时间同步时,出现下面的错误.很显然,它提示的是不能找到主机time.stdtime.gov.tw. 所以我初步猜测是由于dns解析的问题   1 2 3 4 #  /usr/sbi ...

  2. LLVM 笔记(二)—— PHI node

    ilocker:关注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,静 ...

  3. 在阿里云服务器(ECS)上从零开始搭建nginx服务器

    本文介绍了如何在阿里云服务器上从零开始搭建nginx服务器.阿里云服务器(ECS)相信大家都不陌生,感兴趣的同学可以到http://www.aliyun.com/product/ecs去购买,或到体验 ...

  4. Ubuntu 部署 Node.js 应用

    安装Node.js环境 sudo apt-get install nodejs sudo apt-get install npm 对于不同环境依赖 的node_module可以采用以下命令来重新生成 ...

  5. javamail中的 javax.mail.AuthenticationFailedException: failed to connect

    java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect javax.mail.A ...

  6. 关于selenium的CI、框架……

    这段时间除了项目测试外,主要在做web自动化的事情,大致总结一下吧,总体的设计模式pageobject+pagefactory+testng的数据驱动,项目用maven来构建,使用jenkins集成, ...

  7. BZOJ1002[FJOI2007]轮状病毒

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  8. Lrc2srt精灵,增加自定义输出编码

    2015.4.8 对中文支持有点问题,修改了一下,支持自定义输出编码! 修改了建议行末偏移,通常100到200最好了,人的反应时间! http://files.cnblogs.com/files/ro ...

  9. 淘宝WAP版小BUG分析

    前几天发现的一个淘宝WAP版的小BUG,就是用桌面版chrome看的时候产品评价中的图片显示不出来,都是图裂了. 这是什么原因呢?图片为什么会显示不出来呢?淘宝的技术人员.测试人员不可能没发现啊.开启 ...

  10. Windows phone应用开发[21]-图片性能优化

    在windows phone 中常在列表中会常包含比较丰富文字和图片混排数据信息. 针对列表数据中除了谈到listbox等控件自身数据虚拟化问题外.虽然wp硬件设备随着SDK 8.0 发布得到应用可使 ...