前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python笔记:面向对象

python笔记:面向对象

作者头像
超级大猪
发布2019-11-22 09:44:59
3840
发布2019-11-22 09:44:59
举报
文章被收录于专栏:大猪的笔记大猪的笔记

1 封装与断言 在Python中,用类封装概念十分简单,下面是一个类的使用。所有的类都继承自object。在类的成员函数中,第一个参数必须是self,否则,这个函数就会变成类似java中的“静态函数”。__init__是构造函数,里面可以随意的定义类的属性。

代码语言:javascript
复制
class Employee(object):
    def __init__(self):
        self._no=0
        self._name=""
 
    def GetNo(self):
        return self._no
    def SetNo(self,val):
        assert isinstance(val,int),"val must be int"
        self._no = val
 
    def GetName(self):
        return self._name
    def SetName(self,val):
        assert isinstance(val,basestring),"val must be string"
        self._name=val
 
 
 
employee = Employee()
employee.SetName("yinzihao")
employee.SetNo(346093)
print employee.GetName(),"#",employee.GetNo()

2 抽象(这里通过实现策略模式举例) 1  python没有接口,抽象类。检查类型需要用isinstance()函数。 2  python是强类型语言,只是是动态类型的。 3  开搞!实现策略模式。head first中的鸭子帮。 1 Duck的主鸭子

代码语言:javascript
复制
class Duck(object):
    def __init__(self):
        pass
     
    def Do(self):
        self.Ins.Do()
 
    def SetIns(self,duckIns):
        self.Ins = duckIns

2 会飞的鸭子

代码语言:javascript
复制
class FlyDuck(object):
    def Do(self):
        print "fly!!!!"

3 会咕咕叫的鸭子

代码语言:javascript
复制
class GuguDuck:
    def Do(self):
        print "gugugugugu!!!!"

4 测试

代码语言:javascript
复制
import Duck
 
myduck = Duck.Ducker.Duck()
myduck.SetIns(Duck.FlyDuck.FlyDuck())
myduck.Do()
 
myduck.SetIns(Duck.GuguDuck.GuguDuck())
myduck.Do()

输出: fly!!!! gugugugugu!!!! 3 “抽象类”支持 在python 中需要手工进行类型检查,系统提供了abc包。 在这个例子中,实现设计模式中的命令模式,命令模式具体含义不再细述。 1  实现命令模式抽象主体 所有命令的执行者是CmdList类。Commands类是命令的抽象,是一个“抽象类”,供别人来继承。继承Commands的类必须实现“Execute”函数,否则系统panic。这是因为导入了abc包,它提供了函数实现检查。 在python中,接口和抽象类只是广义的含义,系统默认不提供检查。

代码语言:javascript
复制
icommand.py
import abc
 
class CmdList(object):
    def __init__(self):
        self._innerList = []
 
    def Append(self,cmd):
        if isinstance(cmd,Commands):
            self._innerList.append(cmd)
        else:
            raise Exception("baseclass not icommand.Commands")
 
    def Execute(self):
        for item in self._innerList:
            item.Execute()
 
class Commands(object):  
    __metaclass__ = abc.ABCMeta #这一行一定要加,否则检查功能失效
 
    def __init__():
        pass
 
    #这是python的装饰器,原理参考装饰模式,这里不细说。
    @abc.abstractmethod
    def Execute(self):
        pass

2  实现蛋糕命令,做一个蛋糕。如果不实现execute函数,将引发错误。因为我们添加了abc检查 cake.py

代码语言:javascript
复制
import icommand
 
class CakeCmd(icommand.Commands):
    def __init__(self,name):
        self.name = name
 
    def Execute(self):
        print self.name," is created"

3 测试

代码语言:javascript
复制
#命令模式 
import command
 
myList = command.icommand.CmdList()
 
cakeCmd = command.cake.CakeCmd(u"芝士蛋糕")
 
myList.Append(cakeCmd)
myList.Execute()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-05-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档