您的位置:首页 > 编程语言 > Python开发

Python015面向对象之类和对象

2017-09-13 17:24 501 查看
Python015面向对象之类和对象

记得第一次听说面向对象时,觉得很高大上,那时完全不懂什么是面向对象。上大二之前,用的编程思想是面向过程的,那时候还问过老师什么是面向对象,当时老师也是回答的很笼统,并没有听懂什么是面向对象。经过多年开发后,对面向对象有了更加全面的认识。面向对象究竟是什么,感觉并不能解释它的精髓,只可意会不可言传。

现在在我看来,面向对象,是一种代码折叠的技术,把相关功能的数据和函数打包到一起形成对象。对于单线程程序,肯定是顺序执行的,无论我们用的是面向对象的方式还是用面向过程的方式来开发这个程序的。一般情况下,我们总是把业务中的一些事物抽象成一个类,每一个事物拥有一定的功能,这个过程是把相关的数据和功能打包。

对于简短的小程序来说,面向对象没有任何优势可言。对于计算机来说,顺序执行的方式显得很自然。面向对象花费了许多心思让代码折叠起来,必然会有多余的操作,性能上比不过面向过程程序。定义了一些类,代码长度上可能也比面向过程长,理解难度也会大于面向过程。

但是,对于一个很大的工程而言,面向对象的优势就凸显了出来。曾见过比尔这样说:短代码用面向过程很容易实现,一旦代码的量超过1万行,普通人就很难驾驭了,再长一些就突破了人的脑容量。我没有写过这么长的面向过程程序,这句话的真伪有待验证。面向对象把有一定功能的任务组织成类,项目是由许多类组成,开发人员只需要了解其中一些类的用法即可。面向对象程序还有很好扩展性,比面向过程程序更加容易维护。这些优越的特性只是牺牲了微不足道的性能,增加了代码的行数,还是很划算的。

类是模版,对象是通过模版创造出来的一组数据和函数的集合。

说了这么多,你肯定还是不明白什么是面向对象。但是我向你保证,只要你经常使用类和对象的方式来组织代码,很快就会明白面向对象是什么,有什么好处。

面向对象中还有一些专有名词:

类:模版

对象:通过类创建出来具有一定的功能的数据(属性)和函数(方法)的集合

属性:对象中的变量,用于存储对象的数据。一般情况下随着类的创建而创建,随着类的消亡而消亡,与类同生共死

方法:对象的函数,可以使用对象的数据,表示对象的行为。

------------------------------------------------------------------------------------------------------------------------------

类的定义方法如下:

class ClassName:

def __init__(self,var1,...,varX):

self.p1="123";

...

self.pY=[1,2,3,4,5];

...

def funcion1(self,var1,...,varP):

...

... ...

def functionN(self,var1,...,varQ):

...

这里需要解释一下这个函数def __init__(self,var1,...,varX)

以双下划线开头并且以双下划线结尾的函数在Python中叫做魔法方法,这些方法有一些特殊功能,并且一般情况下,不需要我们手动调用。魔法方法还有许多,这里只解释__init__和__str__其他自己去搜吧。

__init__

创建对象时调用,一般用于定义属性(变量),并初始化这些属性(变量)的值

__str__

当对象需要以字符串形式返回的时候,可以在这里写对象对应的字符串

使用类创建对象的方法如下:

1.创建对象

a=ClassName(var1,...varX);

2.调用对象方法

a.funcion1(var1,...,varP);

...

a.functionN(var1,...,varQ);

3.调用对象属性

print(a.p1);#"123"

下面是定义了一个Dog类:

class Dog:

    def __init__(self,name="",color="红色",weight=1,age=0,phrase="汪汪汪!"):

        self.__eyeNum=2;#私有属性,类外不能访问

        self.__legNum=4;#私有属性,类外不能访问

        self.color=color;

        self.name=name;

        self.weight=weight;

        self.age=age;

        self.phrase=phrase;

    def __str__(self):

        return "名字:"+self.name+"    颜色:"+self.color;

    

    def cry(self):

        print(self.name+":"+self.phrase);

        

    def setName(self,name):

        self.name=name;

        

    def setColor(self,color):

        self.color=color;

        

    def setPhrase(self,phrase):

        self.phrase=phrase;
############################Dog Class End###################################

下面是对Dog类的调用:

a=Dog();

a.setName("大黄");

a.cry();#大黄:汪汪汪!

print(a);#名字:大黄    颜色:红色

print("\n"+"*"*30+"\n");#******************************

b=Dog("欧阳疯");

b.setColor("装逼色");

b.setPhrase("吾乃庐陵欧阳疯,汪汪汪!!!!");

b.cry();#欧阳疯:吾乃庐陵欧阳疯,汪汪汪!!!!

print(b);#名字:欧阳疯    颜色:装逼色

print(b.age);#0 普通属性,可以访问
print(b.__legNum);#AttributeError: 'Dog' object has no attribute '__legNum'  私有属性,类外不能访问

#python中以双下划线开头的属性和方法都是私有的,不能在类外访问
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: