python抽象-类

名词解释

对象    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 - 如,birds
  • Python习惯使用单数名词,并且首字母大写 - 如,Bird
  • C++也是单数名词,并且首字母大写
  • 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单一原则

如何创建类:

  1. 写下问题的描述
  2. 名字做类名
  3. 动词作方法
  4. 形容词作特性
  5. 把方法和特性分配到类

如何精炼模型:

  • 写下一系列的实例,试着包括所有功能
  • 考虑和测试每个实例,少的补,错的改

接口和内省

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)                 从非空序列中随机选择元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值