#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
# 面向对象 对象 object
# 多态 封装 继承
# 多态和方法
>>> 'abc'.count('a')
1
>>> ['a', 'b', 'c'].count('a')
1
>>>
# python是面形对象的
1+1
'str1' + 'str2'
from random import choice
x = choice(['x', 'y', ['x', '2', '3'], '4'])
x.count('x') # 注意 int 类型没有count方法
def length_message(x):
print "The length of", repr(x), "is", len(x)
# 可以看到上面的函数中使用了 repr,repr函数是典型的多态性的代表之一,可以对任何东西使用。
# 唯一能毁掉多态的就是函数的显示先查类型。比如 type,isinstance issubclass等函数,如果可能尽量避免。
# 封装 对外部隐藏不必要的细节,内容还是非常多的,只是简单介绍下,具体请实践
class NewObject():
def say(self, hello = 'hello'):
print hello
>>> n1 = NewObject()
>>> n1.say('first Object')
first Object
>>>
>>> n2 = NewObject()
>>> n.say()
hello
>>>
# 继承 简单说就是 爹有多少财产,允许给儿子多少,死了后,儿子就能继承多少
class Base():
def __init__(self, val):
self.val = val
class ExtendsClass(Base):
def printVal(self):
print self.val
>>> x = ExtendsClass('hello')
>>> x.printVal()
hello
>>>
# private 通过两个前置的下划线 __
# 类的命名空间,也就是类,以及类方法、成员等的访问范围
# 指定超类(父类)
class ClassName(ParentClassName):
def functionName(self):
pass
# 如果查看某类是否是另一个类的子类
issubclass()
# 也可以调用 __bases__
ClassName.__bases__
# 同样也可以采用 isinstance 检测 一个对象是否是一个类的实例
isinstance(instanceObject, ClassName)
# 使用 instance 并不是一个好习惯,使用多态会好一点
# 多个超类
class Class1:
def function1(self):
print 'function 1'
class Class2:
def function2(self):
print 'function 2'
class Class3(Class1, Class2):
pass
>>> Class3().function1()
function 1
>>> Class3().function2()
function 2
>>>
# 多重继承,注意顺序的优先级,否则可能带来不必要的麻烦。应该尽量避免使用多重继承
# 接口和内省 概念与多态有关,在处理对象时,只要关心他的接口即可。即:公开的方法和特性
# 小结
# 对象,类,多态,封装,继承,接口和内省,面向对象设计
# 涉及的一些新函数
callable(object)
getattr(object, name[, default])
hasattr(object, name)
isinstance(object, class)
issubclass(A, B)
random.choice(sequence)
setattr(object, name, value)
type(object)
《Python基础教程》学习笔记之[D8]更加抽象——类
只做涂鸦笔记之用,如有疑议等问题可留言探讨。