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)

浙公网安备 33010602011771号