威尼斯wns.9778官网活动_vnsc威尼斯城官网

热门关键词: 威尼斯wns.9778官网活动,vnsc威尼斯城官网
当前位置:威尼斯wns.9778官网活动 > 计算机教程 > 威尼斯wns.9778官网活动:Python面向对象——重写与

威尼斯wns.9778官网活动:Python面向对象——重写与

文章作者:计算机教程 上传时间:2019-05-10

1本文的意义

如果给已经存在的类添加新的行为,采用继承方案

如果改变已经存在类的行为,采用重写方案

       面向对象编程有三大特性:封装、继承、多态。

2图解继承、重写与Super

威尼斯wns.9778官网活动 1

注:上面代码层层关联。super()可以用到任何方法里进行调用,本文只用在了__init__方法中,通过重写和调用super,可以修改所有方法。

上面类的实例化:

威尼斯wns.9778官网活动 2

       封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。

3代码验证

class ContactList(list):
    def search(self, name):
        matching_contacts = []
        for contact in self:
            if name in contact.name:
                matching_contacts.append(contact)
        return matching_contacts

class Contact:
    all_contacts = ContactList()
    def __init__(self, name, email):
        self.name = name
        self.email = email
        self.all_contacts.append(self)


class Friend(Contact):
    def __init__(self, name, email, phone):
        super().__init__(name, email)
        self.phone = phone

contact1 = Contact("Zhang San", "ZhangSan@qq.com")
contact2 = Contact("Li Si", "LiSi@qq.com")
contact3 = Contact("WangWu", "WangWu@qq.com")

myFriend1 = Friend("LiLi", "Lili@qq.con", 666666)
myFriend2 = Friend("YueYue", "Yueyue@qq.con", 888888)

In [1]: Contact.all_contacts  # 列表记录了实例化的5个对象
[<__main__.Contact at 0x22d6a877048>,
 <__main__.Contact at 0x22d6a871fd0>,
 <__main__.Contact at 0x22d6a877080>,
 <__main__.Friend at 0x22d6a8770b8>,
 <__main__.Friend at 0x22d6a877160>]

In [2]: [c.name for c in Contact.all_contacts.search('Li')]
['Li Si', 'LiLi']

参考:本文参考学习《Python3 Object Oriented Programming》,根据自己理解改编,Dusty Phillips 著

 

       继承是为了重用父类代码。两个类若存在IS-A的关系就可以使用继承。,同时继承也为实现多态做了铺垫。那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开:

       所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。

       比如你是一个酒神,对酒情有独钟。某日回家发现桌上有几个杯子里面都装了白酒,从外面看我们是不可能知道这是些什么酒,只有喝了之后才能够猜出来是何种酒。你一喝,这是剑南春、再喝这是五粮液、再喝这是酒鬼酒….在这里我们可以描述成如下:

       酒 a = 剑南春

       酒 b = 五粮液

       酒 c = 酒鬼酒

威尼斯wns.9778官网活动,       …

       这里所表现的的就是多态。剑南春、五粮液、酒鬼酒都是酒的子类,我们只是通过酒这一个父类就能够引用不同的子类,这就是多态——我们只有在运行的时候才会知道引用变量所指向的具体实例对象。

       诚然,要理解多态我们就必须要明白什么是“向上转型”。在继承中我们简单介绍了向上转型,这里就在啰嗦下:在上面的喝酒例子中,酒(Win)是父类,剑南春(JNC)、五粮液(WLY)、酒鬼酒(JGJ)是子类。我们定义如下代码:

       JNC a = new JNC();

       对于这个代码我们非常容易理解无非就是实例化了一个剑南春的对象嘛!但是这样呢?

       Wine a = new JNC();

本文由威尼斯wns.9778官网活动发布于计算机教程,转载请注明出处:威尼斯wns.9778官网活动:Python面向对象——重写与

关键词: