面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

  类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

  对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

class Role(object):        #创建类
def __init__(self, name, role, weapon, life_value): #构造函数
self.name = name
self.role = role
self.weapon = weapon
self.life_val = life_value def buy_weapon(self, weapon): #类中每个方法的第一个参数必须是self
print('%s is buying [%s]' % (self.name, weapon))
self.weapon = weapon p1 = Role('Jack', 'Police', 'Mp5', 100) #根据类创建对象
t1 = Role('cannor', 'Terrorist', 'Mp5', 100)
p2 = Role('rain', 'Police', 'Mp5', 100)
print(p1.weapon)
print(t1.weapon)
p1.buy_weapon('B42') #执行buy_weapon方法
t1.buy_weapon("AK47")

面向对象的三天特性:封装,继承 和 多态

一、封装:就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

class Foo(object):
def __init__(self, name, age):
self.name = name
self.age = age obj = Foo('Terry', 20) #将Terry和20分别封装在obj的name和age属性中 obj2 = Foo('kittly', 22) #将kittly和22分别封装在obj2的name和age属性中

self 是一个形式参数,当执行obj = Foo(‘terry’, 20)  时,self等于obj,  内容被封装到了obj中,每个对象中都有name和age属性。

二、继承: 子类可以继承父类的内容

例如: 猫可以: 喵喵叫,吃,喝,拉,撒

狗可以:汪汪叫,吃, 喝,拉,撒

class Animal(object):
def eat(self):
print('%s 吃' % sefl.name) def drink(self):
print('%s 喝' % self.name) def shit(self):
print('%s 拉' % self.name) def pee(self):
print('%s 撒' % self.name) class Cat(Animal):
def __init__(self, name):
self.name = name
self.breed = '猫' def cry(self):
print('喵喵叫') class Dog(Animal):
def __init__(self, name):
self.name = name
self.breed = '狗' def cry(self):
print('汪汪叫')

python的类是可以多继承的,如果继承了多个类,那么其寻找方法有两种: 深度优先 和 广度优先

经典类: 多继承时,按照深度优先的方式查找

新式类:多继承时,按照广度优先方式查找

B和C继承A ,  D继承B和C:

执行D类方法时,首先在D类中查找,如果D类中没有,则去B类中查找,如果B类中没有,则继续去C类中查找,如果C类中也没有则去A类中查找,如果A类中也没有,就报错了。

经典类写法:

class C1:
pass class C2(C1):
pass

新式类的写法:

class N1(object):
pass class N2(N1):
pass

三、多态

python中没有多态,也用不到多态,python崇尚的是’鸭子类型‘:

class F1:
pass class S1(F1): def show(self):
print 'S1.show' class S2(F1): def show(self):
print 'S2.show' def Func(obj):
print obj.show() s1_obj = S1()
Func(s1_obj) s2_obj = S2()
Func(s2_obj)

python(6)-类的更多相关文章

  1. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  2. 【python】类中的self

    在python的类中,经常会写self,代表对象自己.如下例: #coding=utf-8 class Foo: def __init__(self, name): self.name = name ...

  3. python基础——类和实例

    python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...

  4. 从C#到Python —— 4 类及面向对象

    http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...

  5. Python type类具体的三大分类:metaclasses,classes,instance

    Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...

  6. python元类分析

    刚開始接触到Python新式类中的元类的概念的时候非常是纠结了下..不知道这是个啥东西... 用下面几个定义来说明吧: (1)Python中,类也是对象..仅仅只是这样的对象比較的特殊,他用于创建别的 ...

  7. Python用类实现串以及对串的方法进行单元测试

    串是一种常见的数据结构,这里使用Python定义类来实现相应的方法.先看代码,再对相关知识进行讲解. # coding=utf-8 __all__=['ADTString'] class ADTStr ...

  8. Python基础-类

    Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...

  9. 谨慎修改Python的类属性

    Python的类和类实例都是可变对象,可以随时给属性赋值,并且在原处修改. 在对类属性进行修改时需要特别小心,因为所有的类实例都继承共享类属性,除非实例本身存在和类属性同名的属性.对类属性进行修改,会 ...

随机推荐

  1. matplotlib绘制三维图

    本文参考官方文档:http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 起步 新建一个matplotlib.figure.Figure对象, ...

  2. windows下编译支持https的libcurl

    本文参考http://blog.csdn.net/fragmentalice/article/details/39430293特此感谢.公司项目中用到几个http get请求,用的libcurl开源库 ...

  3. labview多个并行循环同时退出

    labview中停止并行的循环 问题: 在labview中我如何停止两个并行的循环?我使用一个局部变量,但是当我停止程序执行后,第二次不能运行程序.我该如何解决这个问题呢? 解答:  你使用局部变量来 ...

  4. codeforce 630N Forecast

    N. Forecast time limit per test 0.5 seconds memory limit per test 64 megabytes input standard input ...

  5. poj 3693 Maximum repetition substring (后缀数组)

    其实是论文题.. 题意:求一个字符串中,能由单位串repeat得到的子串中,单位串重复次数最多的子串.若有多个重复次数相同的,输出字典序最小的那个. 解题思路:其实跟论文差不多,我看了很久没看懂,后来 ...

  6. HDU 4462 Scaring the Birds (暴力求解,二进制法)

    题意:给定一个 n*n的矩阵,在一些位置放上稻草人,每个稻草人的范围是一定,问你最少几个能覆盖整个矩阵. 析:稻草人最多才10个,所以考虑暴力,然后利用二进制法,很容易求解,并且时间很少0ms,注意有 ...

  7. mmap和普通文件读写的区别和比较 & mmap的注意点

    参考 http://www.cnblogs.com/huxiao-tee/p/4660352.html 对linux文件系统不了解的朋友,请参阅我之前写的博文<从内核文件系统看文件读写过程> ...

  8. 8086、80x86(IA-32)、64(IA-64)位CPU发展

    众所周知,CPU(中央处理单元)是计算机的核心部分,CPU在单位时间内能一次处理的二进制数的位数叫字长,从386.486直到奔腾系列的CPU都是32位,大多数情况32位计算已经能满足现阶段人们的需要. ...

  9. IOC使用Unity 实现依赖注入

    转自:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html http://www.cnblogs.com/xishuai ...

  10. The plot Function in matlab

    from http://pundit.pratt.duke.edu/wiki/MATLAB:Plotting The plot Function The plot function is used t ...