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

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

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

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. SDK "iphoneos" cannot be located

    在MAC下,交叉编译libvlc出现的一些问题和解决方法.项目中使用了libvlc开源库.在执行编译脚本中,遇到一句xcrun --sdk iphoneos --show-sdk-path报错 mac ...

  2. RHEL6.4 KVM 桥接上网的设置

    关闭网络管理器 chkconfig NetworkManager off  ##和桥接有冲突,要关闭 service NetworkManager stop   修改eth0为物理网口,br0为桥接网 ...

  3. 第二百四十二天 how can I 坚持

    今天... 貌似没啥啊. 第一天带帽子上班. 还有回来买了两个柚子吃了,有点上火啊. 还有今天雾霾爆表啊,pm2.5  600多啊. 还有看了部电影<蚁人>,挺好看.希望不会出二.三.四. ...

  4. Delphi开发ocx插件的调试

    Delphi开发ocx苦于调试,网上看了下大概配置: IE调用ocx调试配置,在当前ocx工程  run-->parameters-->host application 里面配置IE的程序 ...

  5. codeforces 630J Divisibility

    J. Divisibility time limit per test 0.5 seconds memory limit per test 64 megabytes input standard in ...

  6. properties.load(in); 引出的中文乱码问题

    /** * Reads a property list (key and element pairs) from the input byte stream. * The input stream i ...

  7. 《精通ASP.NET MVC5》第2章 第一个MVC应用程序

      控制器     public class NewHomeController : Controller     {         // GET: /NewHome/         public ...

  8. 当LinkButton无效时,光标不显示为手型

    在Flex组件LinkButton里,我们可以用useHandCursor属性来控制是否使用手型光标.现在我们要实现在LinkButton的enable=false时,useHandCursor=fa ...

  9. PostgreSQL的 initdb 源代码分析之二十四

    继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...

  10. C++ XML解析之TinyXML篇[转]

    最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...