python面向对象编程基础
演示了 Python 类与对象的编程基础, 包括属性、方法、继承、组合、动态创建类。 python 版本: 2.7.5
class SimpleClass(object):
''' a simple demo for python class '''
commonResource = 1000
def __init__(self, name, age):
print 'object has built: ', str(self)
self.name = name
self.age = age
SimpleClass.decrease()
def info(self):
return 'id is: %d, my name is %s, and age is %d' % (SimpleClass.commonResource, self.name , self.age)
@classmethod
def decrease(cls):
SimpleClass.commonResource-=1
@classmethod
def getCommonResource(cls):
return SimpleClass.commonResource
class Person(SimpleClass):
''' Person definition '''
def __init__(self, name, age, sex, __secret):
super(Person, self).__init__(name, age)
self.sex = sex
self.__secret = __secret
def info(self):
return super(Person, self).info() + \
', i am a ' + ('girl' if self.sex == 'female' else 'boy') + '.' + \
'\nmy secret: ' + self.__secret
class CanFly(object):
skill = 'I can fly !'
def fly(self, info=None):
return (info if info else ' ') + CanFly.skill
class CanSwim(object):
skill = 'I can swim !'
def swim(self, info=None):
return (info if info else ' ') + CanSwim.skill
# static multiple inheritance
class CanDoManyThing(CanFly, CanSwim):
pass
class PersonCanFlyAndSwim(Person, CanDoManyThing):
pass
# combination
class PersonCanDoManyThing(object):
def __init__(self, person, skills):
self.person = person
self.skills = skills
def showSkills(self):
print self.person.info() + self.skills.fly() + self.skills.swim()
def updateSkills(self, newSkills):
self.skills = newSkills
def showDySkills(self):
infostr = self.person.info()
subclasses = self.skills.__class__.__bases__
for subclass in subclasses:
infostr += subclass().skillIn()
print infostr
if __name__ == '__main__':
cat = SimpleClass('mimi', 2)
print '<' + cat.name + ',' + str(cat.age) + '>'
# no private instance attribute in python class
print SimpleClass.getCommonResource()
cat.decrease()
print SimpleClass.commonResource
# no private class attribute in python class
print '\n----------- my lover --------------'
mylover = PersonCanFlyAndSwim('yanni', 26, 'female', 'OO')
print mylover.fly(mylover.info())
print '\n----------- me --------------'
me = Person('qinshu', 30, 'male', 'Oh')
mecando = PersonCanDoManyThing(me, CanDoManyThing())
mecando.showSkills()
class SkillTpl(object):
def skillIn(self):
return 'I can ' + self.skill + ' !'
def dyGenSkillClass(skillName):
SkillClass = type(skillName, (SkillTpl,), {'skill': skillName})
return SkillClass
skillNameList = ['Reading', 'Writing', 'Riding']
skillClasses = []
for skillName in skillNameList:
SkillClass = dyGenSkillClass(skillName)
skillClasses.append(SkillClass)
t = tuple(skillClasses)
DynamicSkills = type('MySkills', t, {})
myskillsNow = DynamicSkills()
mecando.updateSkills(myskillsNow)
mecando.showDySkills()
print '\n----------- other ----------------'
print "class name: %s\nclass doc: %s\nmodule: %s" % \
(SimpleClass.__name__ , SimpleClass.__doc__, SimpleClass.__module__)
print "class attr: ", dir(SimpleClass)
print mylover.__dict__
print dir(mylover)
# private instance attribute name in python class should start with __
try:
print me.__secret
except AttributeError, arg:
print arg
python面向对象编程基础的更多相关文章
- Python 面向对象编程基础
Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...
- python学习第十四天 -面向对象编程基础
python也是支持面向对象编程的.这一章节主要讲一些python面向对象编程的一些基础. 什么是面向对象的编程? 1.面向对象编程是一种程序设计范式 2.把程序看做不同对象的相互调用 3.对现实世界 ...
- Python基础 — 面向对象编程基础
目录 1. 面向对象编程基础 2. 定义类和创建对象 3. init() 方法 4. 魔法方法 5. 访问可见性问题 5. 练习 1. 面向对象编程基础 把一组数据结构和处理它们的方法组成对象(obj ...
- Python学习-第三天-面向对象编程基础
Python学习-第三天-面向对象编程基础 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例.这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出,类是抽象的概念,而对象是具体的 ...
- day23面向对象编程基础
面向对象编程基础1.面向过程的编程思想 核心过程二字,过程指的是解决问题的步骤,即先干什么\再干什么\后干什么 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式 优点 ...
- Python 面向对象之五 基础拾遗
Python 面向对象之五 基础拾遗 今天呢,就剩下的面向对象的相关知识进行学习,主要会学习以下几个方面的知识:1.上下文管理协议,2.为类加装饰器 3.元类 一.上下文管理协议 在学习文件操作的时候 ...
- 图解python | 面向对象编程
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/56 本文地址:http://www.showmeai.tech/article-det ...
- 第二章 Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- [.net 面向对象编程基础] (1) 开篇
[.net 面向对象编程基础] (1)开篇 使用.net进行面向对象编程也有好长一段时间了,整天都忙于赶项目,完成项目任务之中.最近偶有闲暇,看了项目组中的同学写的代码,感慨颇深.感觉除了定义个类,就 ...
随机推荐
- Topic 与 Partition
Topic在逻辑上可以被认为是一个queue队列,每条消息都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里.为 了使得Kafka的吞吐率可以水平扩展,物理上把topic分 ...
- Linux alias 命令
alias命令用于查看或设置命令别名,但仅作用于该次登陆的会话,若要永久使用别名,可在 ~/.bashrc 中设定别名 [root@localhost ~]$ alias // 查看别名 [root@ ...
- C++中的枚举变量
至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到了语言当中,而且一度成为C++中定义编译期常量的唯一方法(后来在类中引入了静态整型常量).根据上面对enum类型的描述,有以下 ...
- cocos2d-x游戏引擎核心之六——绘图原理和绘图技巧
一.OpenGL基础 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装.OpenGL 全称为 Open Graphics Library,是一个开放的 ...
- UISearchBar和UISearchDisplayController
原文 http://hi.baidu.com/happywilma0118/item/e6d5730a499bba1b3a53eef8 UISearchBar继承自UIView.UIResponder ...
- poj_3352 连通图的桥
题目大意 给定N个点,他们之间用一些双向边连通,使得这N个点两两相互可达.但是其中某些双向边为桥,这样若断开这些桥,则整个图就无法做到点之间两两可达.现在可以添加若干条双向边,使得断开图中的任意一条边 ...
- Ubuntu 如何更改用户密码
你需要为第一个帐户创建一个密码.这可以用 passwd 命令来完成. 系统会提示输入你的旧密码一次,输入你的新密码两次.用 root 用户更改用户 paul 的密码[root@bigboy root] ...
- 【BZOJ5099】[POI2018]Pionek 几何+双指针
[BZOJ5099][POI2018]Pionek Description 在无限大的二维平面的原点(0,0)放置着一个棋子.你有n条可用的移动指令,每条指令可以用一个二维整数向量表示.每条指令最多只 ...
- mysql数据库新插入数据,需要立即获取最新插入的id
在MySQL中,使用auto_increment类型的id字段作为表的主键.通常的做法,是通过“select max(id) from tablename”的做法,但是显然这种做法需要考虑并发的情况, ...
- RSA算法原理与加密解密 求私钥等价求求模反元素 等价于分解出2个质数 (r*X+1)%[(p-1)(q-1)]=0
Rsapaper.pdf http://people.csail.mit.edu/rivest/Rsapaper.pdf [概述Abstract 1.将字符串按照双方约定的规则转化为小于n的正整数m, ...