名词解释
对象 Object 包括attr和method
类 Class obj的集合
---- ----------------
封装 Encapsulation 隐藏obj的细节
继承 Inheritance 普通的class为基础,创建专门的subclass
---- ----------------
多态 Polymorphism 对不同obj使用相同的Method Poly-多
方法 Method 绑定到obj Attr上的函数
特性 Attribute obj的变量
---- ----------------
子类 Subclass 一个class是另一个class的子集
超类 Superclass 一个class是另一个class的超集
构造函数 不在此说明
duck typing: 如果他像鸭子一样呱呱大叫,那他就是鸭子
object的state由他的Attribute(变量)来描述object的Method(函数)可以改变他的Attr(变量)
类和类型
一般对话使用复数名词来描述class - 如,birdsPython习惯使用单数名词,并且首字母大写 - 如,BirdC++也是单数名词,并且首字母大写mint在C++语言中更习惯再加前缀C - 如,CBird
类
e.g. 通常类的创建:
class 类名:
attr1 = 0
attr2 = []
def Method1(self):
print(self.attr1)
def Method2(self, params):
self.attr2[i] = params
e.g. 通常类的继承:
class 类名(superclass1, superclass2, ...):
self类似C++中的隐式参数this指针c++是隐式的,不用写出来
self参数正是方法和函数的区别
新式类的声明:
__metaclass__ = type # use new type
python为了让方法或者特性变为私有private,在他名前面加上双下划线即可 但python的私有化是假的,还是可以访问的到 而c++是使用编译器的关键字private 此外,名字带有下划线的不会被form module import *的方式引用
一些面向对象的设计
将属于一类的obj放一起不要让obj过于亲密,Method只关心自己obj的attr小心继承,尤其是多重继承简单就好,Method单一原则
如何创建类:
写下问题的描述名字做类名动词作方法形容词作特性把方法和特性分配到类
如何精炼模型:
写下一系列的实例,试着包括所有功能考虑和测试每个实例,少的补,错的改
接口和内省
getattr(obj, name[, default]) 返回attr
hasattr(obj, name) 是否有此attr,返回bool值
setattr(obj, name, value) 给obj创建obj并赋值
isinstance(obj, class) obj是否是class的实例
issubclass(A,B) A是否是B的subclass
type(obj) 返回对象类型
其他函数
random.choice(seq) 从非空序列中随机选择元素
转载请注明原文地址: https://ju.6miu.com/read-662049.html