Python面向对象的编程|以女朋友为例!

Python面向对象的编程|以女朋友为例!,第1张

概述一个类有两个特点:属性、行为举一个例子,假如这个对象是你女朋友,那么,

一个类有两个特点:属性、行为

举一个例子,假如这个对象是你女朋友,那么,

属性包括:名字、年龄、身高、生日等

行为包括:买包、吃饭、逛街等。

Python作为面向对象的语言,主要优点是代码的重用性,也就是DRY(Don’t Repeat Yourself)。Python中面向对象遵循3个基本选择:

1、继承(inheritance):通过既有的类来创建新类,新类继承既有类的属性和方法

2、封装(Encapsulation):对于对象来说,隐藏本类内部的细节

3、多态(polymorphism):能够处理不同类型的传入数据

类(class)

一个类就是一个对象的蓝图或者模型。它描述了对象的特征。对于一个类我们可以如下定义:

class GirlFrIEnd: pass

我们通过关键词class来定一个叫做GirlFrIEnd的类。这儿的类是泛指,下面我们会介绍对象。

对象(object)

对象是类的实例化。如下,比如你找了一个新女朋友lisa:

lisa = GirlFrIEnd()

lisa这一个对象就是GirlFrIEnd这个类的实例化。你不在仅仅泛泛地谈论女朋友,而是确实找到了一个叫lisa的女孩子做女朋友。

实例:

class GirlFrIEnd: #类属性 sex = "Female" #实例化属性 def __init__(self,name,age): self.name = name self.age = age#你有一个叫lisa的女朋友lisa = GirlFrIEnd('lisa',27)#然后你还有一个叫Anna的女朋友Anna = GirlFrIEnd('Anna',28)print("I am {},{} years old!".format(lisa.name,lisa.age))print("I am {},{} years old!".format(Anna.name,Anna.age))

输出结果为:

I am lisa,27 year old!I am Anna,28 year old!

方法

方法是在类里面定义的函数,通常用来定义一个对象的行为。

class GirlFrIEnd: #实例化属性 def __init__(self,age): self.name = name self.age = age def eating(self,food): print("I am eating {}".format(food)) def buying(self,item): print("I want to buy a {}".format(item))lisa = GirlFrIEnd('lisa',27)lisa.eating("Apple")lisa.buying("Cucci")

上述输出结果为:

I am eating AppleI want to buy a Cucci

lisa的行为包括eating和buying。

继承

通过现有的类创建新的类。这个新创建的类叫做“子类”,原有的类称为“父类”。比如年龄超过20岁的女朋友为可结婚的女朋友,我们称之为“可结婚女友”。这是我们可以通过女朋友的类来定义可结婚女友的类。

#父类class GirlFrIEnd: #实例化属性 def __init__(self,age): self.age = age def eating(self,item): print("I want to BUY a {}".format(item))#子类class MarriageGF(GirlFrIEnd): def __init__(self,name): GirlFrIEnd.__init__(self,20) #注意这儿是怎么调用父类的 self.name = name print("Marriage GirlfrIEnd is ready!") def marriage(self,time): print("I am {},I going to marry on {}!".format(self.name,time)) def buying(self,item): print("I want to HAVE a {}.".format(item))lily = MarriageGF('lily')lily.agelily.namelily.eating('egg')lily.buying('LV')lily.marriage('today')

上述运行结果:

>>> lily = MarriageGF('lily')Marriage GirlfrIEnd is ready!>>> lily.age20>>> lily.name'lily'>>> lily.eating('egg')I am eating egg>>> lily.buying('LV')I want to HAVE a LV.>>> lily.marriage('today')I am lily,I going to marry on today!

可以看出,MarriageGF只是GirlFrIEnd的一个特殊的类,只不过是将age限定在类20。我们创建了一个可结婚女友,lily,她继承了GirlFrIEnd的的属性和方法,比如GirlFrIEnd中的eating方法虽然没有在MarriageGF中定义,但是lily依旧能够调用该方法,同时,如果父类和子类的方法冲突,如buying,那么lily的buying方法将会按照子类方法来运行,父类的buying方法会被覆盖。同样地,通过父类定义的对象不能够调用子类的方法。简而言之,对象的方法只会向上一级查询,不会向下一级查询!

封装

在Python中,我们可以通过在私有属性前面加双下划线前缀,来防止从类外部访问私有属性。比如,我们定一个女朋友,其体重只有自己知道,不允许从外部调用体重。

class GirlFrIEnd: #实例化属性 def __init__(self,name): self.name = name self.age = 27 self.__weight = 55 def OnDIEt(self): if self.__weight > 60: print("I am overweight!") else: print("I am good figure!")lisa = GirlFrIEnd('lisa')lisa.agelisa.__weightlisa.OnDIEt()

运行结果:

>>> lisa.age27>>> lisa.__weightTraceback (most recent call last): file "",line 1,in AttributeError: 'GirlFrIEnd' object has no attribute '__weight'>>> lisa.OnDIEt()I am good figure!

可以看到,通过在双下划线前缀定一个属性(__weight)不能被外部访问,只能够在类内部访问。

多态性

面向对象的编程中,针对不同的数据形式使用同一个接口。

class GirlFrIEnd: def sex(self): print("I am female!")class BoyFrIEnd: def sex(self): print("I am male!")#定义共同接口def spouse_sex(spouse): spouse.sex()lily = GirlFrIEnd()Tom = BoyFrIEnd()spouse_sex(lily)spouse_sex(Tom)

输出结果为:

>>> spouse_sex(lily)I am female!>>> spouse_sex(Tom)I am male!

上面我们定一个两个类,一个是女朋友、一个是男朋友,他们都有共同的方法sex(),但是这两种方法在不同的类中的作用不同。为了实现多态,我们重新定一个了一个新接口spouse_sex(),通过这种方法,我们整合了两个类中的sex()函数。

总结

进群:548377875  即可获取数十套pdf哦!

面向对象编程的三大特点:继承、封装和多态。面向对象的最大优势是:代码变得简单高效;代码可以重用;数据更加安全。

总结

以上是内存溢出为你收集整理的Python面向对象的编程|以女朋友为例!全部内容,希望文章能够帮你解决Python面向对象的编程|以女朋友为例!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1208620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存