python(6)-类
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
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)-类的更多相关文章
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 【python】类中的self
在python的类中,经常会写self,代表对象自己.如下例: #coding=utf-8 class Foo: def __init__(self, name): self.name = name ...
- python基础——类和实例
python基础——类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都 ...
- 从C#到Python —— 4 类及面向对象
http://www.cnblogs.com/yanxy/archive/2010/04/04/c2p_4.html 如果你熟悉C#,那么对类(Class)和面向对象(Object Oriented) ...
- Python type类具体的三大分类:metaclasses,classes,instance
Python type类视角中的对象体系需要我们不断的学习,其中我们使用的时候需要注意.下面我们就看看如何才能更好的运用Python type类.下面的文章希望大家有所收获. 在单纯的Python t ...
- python元类分析
刚開始接触到Python新式类中的元类的概念的时候非常是纠结了下..不知道这是个啥东西... 用下面几个定义来说明吧: (1)Python中,类也是对象..仅仅只是这样的对象比較的特殊,他用于创建别的 ...
- Python用类实现串以及对串的方法进行单元测试
串是一种常见的数据结构,这里使用Python定义类来实现相应的方法.先看代码,再对相关知识进行讲解. # coding=utf-8 __all__=['ADTString'] class ADTStr ...
- Python基础-类
Python基础-类 @(Python)[python, python基础] 写在前面 如非特别说明,下文均基于Python3 摘要 本文重点讲述如何创建和使用Python类,绑定方法与非绑定方法的区 ...
- 谨慎修改Python的类属性
Python的类和类实例都是可变对象,可以随时给属性赋值,并且在原处修改. 在对类属性进行修改时需要特别小心,因为所有的类实例都继承共享类属性,除非实例本身存在和类属性同名的属性.对类属性进行修改,会 ...
随机推荐
- SDK "iphoneos" cannot be located
在MAC下,交叉编译libvlc出现的一些问题和解决方法.项目中使用了libvlc开源库.在执行编译脚本中,遇到一句xcrun --sdk iphoneos --show-sdk-path报错 mac ...
- RHEL6.4 KVM 桥接上网的设置
关闭网络管理器 chkconfig NetworkManager off ##和桥接有冲突,要关闭 service NetworkManager stop 修改eth0为物理网口,br0为桥接网 ...
- 第二百四十二天 how can I 坚持
今天... 貌似没啥啊. 第一天带帽子上班. 还有回来买了两个柚子吃了,有点上火啊. 还有今天雾霾爆表啊,pm2.5 600多啊. 还有看了部电影<蚁人>,挺好看.希望不会出二.三.四. ...
- Delphi开发ocx插件的调试
Delphi开发ocx苦于调试,网上看了下大概配置: IE调用ocx调试配置,在当前ocx工程 run-->parameters-->host application 里面配置IE的程序 ...
- codeforces 630J Divisibility
J. Divisibility time limit per test 0.5 seconds memory limit per test 64 megabytes input standard in ...
- properties.load(in); 引出的中文乱码问题
/** * Reads a property list (key and element pairs) from the input byte stream. * The input stream i ...
- 《精通ASP.NET MVC5》第2章 第一个MVC应用程序
控制器 public class NewHomeController : Controller { // GET: /NewHome/ public ...
- 当LinkButton无效时,光标不显示为手型
在Flex组件LinkButton里,我们可以用useHandCursor属性来控制是否使用手型光标.现在我们要实现在LinkButton的enable=false时,useHandCursor=fa ...
- PostgreSQL的 initdb 源代码分析之二十四
继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...
- C++ XML解析之TinyXML篇[转]
最 近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完 成.以后的文章里会讲 ...