Python_Share_Mol_003

Python_Share_Mol_003

@(我的分享)[python]

按照惯例,扯闲篇

一切皆对象 这个概念已经深入人心了。面向对象的概念我就不分享了。我要分享的是python中的面向对象

面向对象

说到面向对象,几乎所有的程序员都可以叫嚣着说自己已经了解继承、多态、封装这三大特性了。诚然,这三个特性的概念确实很容易背下来,但是怎么用呢?至少我没有见过任何一个老师讲多态的时候,会告诉你什么是liskel替换原则(代码设计原则)。不过,我相信能看懂本篇文章的人,一定是可以明白的。
我假想你已经知道面向对象的三大特性,并且在C#中用得很666.下面的分享将以C#面向对象做为蓝本来分享。

先来个class 试试水

下面是类定义

# !/usr/bin/python
# -*- coding: UTF-8 -*-
class MolFans:
    FansCount=0
    def __init__(self,Name,Age):
        self.Name=Name
        self.Age=Age
        MolFans.FansCount+=1
    def DisplayCount(self):
        print("我现在有{0}个粉丝".format(self.FansCount))
    def DisplayCurrentFans(self):
        print("我是{0},我今年{1}了".format(self.Name,self.Age))

下面是类调用

import MolFans

fans=MolFans.MolFans("Jack",22)
fans.DisplayCount()
fans.DisplayCurrentFans()
fans2=MolFans.MolFans("Lily",18)
fans2.DisplayCount()
fans2.DisplayCurrentFans()

细节提示

这里我们使用了import这个关键字,正如你猜想的一样,它和java里面的import没啥区别,相当于C#中的using namespace
需要注意的是,java和C#中,只要你import或者using包含了命名空间,那么,命名空间就可以省略不写

Console.WriteLine("内容");

它等价于

System.Console.WriteLine("内容");

但是在python中,不是这样的,首先,import是必须包含的,你不能直接使用包名.类名来定义一个对象。其次,你将包名引用到程序中以后,包名也是不能省略的。
如上面定义一个MolFans对象

fans=MolFans.MolFans("Jack",22)

而不能写成

fans=MolFans("Jack",22)

继承

C#中的继承太简单了。定义一个父类(暂且不考虑接口),子类继承父类,就可以了。
在python中也是一样的,它的继承看起来像是这样:

#! /usr/bin/python
# 因为python2中处理中文还需要强制指定编码,所以,我将使用python3来说明
# 所以,这里没有指定编码。后续也不会指定编码

#下面是父类
class Parent:
	def __init__(self ,Name,Age):
		self.Name=Name
		self.Age=Age
	def ShowMessage(self):
		print("我是父类方法,名字是{0},年龄是{1}".format(self.Name,self.Age))
	def ShowSelfMessage(self):
		print("我是父类方法")

# 下面是子类		
class Child(Parent):
	def ShowSelfMessage(self):
		print("我是子类方法")
# 家里的电脑出问题了,虚拟机打不开。上面的代码全部都是未运行的代码,极有可能还有拼写错误,大家将就着看吧。

可以看到,子类如果需要重写父类方法,只需要在子类中重新实现一下同名方法既可。而不像C#中还需要用override或new来修饰一下。

几乎所有的语言中都有重写机制,但我从来不建议任何人去这样用。要想知道原因,查阅一下李氏替换原则的描述(liskov)

posted @ 2017-09-05 09:30  飞荷扬菊  阅读(180)  评论(0)    收藏  举报