7 类和对象
1.对象魔法
1.多态
2.多态和方法
3.封装
4.继承
2.类
1.类是什么 类 类型
2.创建自定义类
class Person:
def set_name(self,name):
self.name = name
def get_name(self):
return self.name
self是对象本身,方法将第一个参数关联到它所属的示例,调用时无需提供
3.属性、函数和方法
4.再谈隐藏
默认,可从外部访问对象属性。
让方法或属性成为私有:在名称前加双下划线。 但是,实际上是在类定义中对这样的名称进行了转换,在开头加上了一个下划线和类名
就是说,python没有真正的私有方法/成员
5.类的命名空间
6.指定超类(父类)
class 类名(父类名)
7.继承
issubcclass 判断一 个类是另一个类的子类
__bases__ 属性,得到基类
isinstance 对象是某个类的实例
8. 多个超类
基类可以有多个(多重继承)
9.接口和内省
10.抽象基类
模块abc
@abstractmethod 标记抽象方法
3.面向对象设计的指南
-把相关的东西放在一起。
-不要让对象之间过于亲密
-慎用继承,尤其是多重继承。
-保持简单。
确保需要哪些类及需要哪些方法:
1.将问题描述记录下来,给名词、动词和形容词加标记。
2.在名词中找可能的类。
3.动词找方法
4.形容词找属性
5.把找出的方法和属性分配给各个类
改进:
设想使用场景。
小结
python的类和对象概念和C++的类和对象有很多相似的地方,共同的oop原则(多态、封装、继承)。也有很多不同的地方,比如c++中的私有和保护在python中不存在。
第7章出现的函数
callable(object) 判断对象是否是可调用的(如是否是函数或方法)
getattr(object,name[,default]) 获取属性的值,还可提供默认值
hasattr(object, name) 确定对象是否有指定的属性
isinstance(object, class) 确定对象是否是指定类的实例
issubclass(A, B) 确定A是否是B的子类
random.choice(sequence) 从一个非空序列中随机地选择一个元素
setattr(object, name, value) 将对象的指定属性设置为指定的值
type(object) 返回对象的类型