Python菜鸟学习手册08----面向对象的基本概念

简介

        虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。

        类是对现实世界中一些事物的封装。在人类认知中,会根据属性相近 把东西归类,并且给类别命名。比如说,鸟类的共同属性是有羽毛,通过产卵生育后代。而且,这些鸟还有共同的行为,如飞行、名叫。任何 一只特别的鸟都在 鸟类的原型基础上的。接下来以鸟为例来介绍类的用法。

class Bird:                                                 #创建类--鸟
    have_feather = True                                     #定义类的属性(have_feather、way_of_reproduction、song均是该类的属性)
    way_of_reproduction  = "egg"
    song="叽叽喳喳"
    def sing(self):                                         #定义类的方法(self必不可少)
        print(self.song)
    def move(self):
        print("飞飞飞飞飞")
mybird=Bird()                                               #实例化类的对象,可以使用这个对象访问类中的方法和属性
mybird.sing()                                               #访问类中的方法(对象名.方法)
print("mybird通过"+mybird.way_of_reproduction+"繁殖")       #访问类中的属性(+号的作用是连接字符串)  
输出
叽叽喳喳
mybird通过egg繁殖
      小小的总结一下,我们定义了一个类(class),就是鸟(Bird)。在该类中,我们定义了三个变量,一个是有羽毛(have_feather),一个是生殖方式(way_of_reproduction),还有一个是叫声(叽叽喳喳),这几个变量就是类的属性(attribute)。我们还定义个两个函数,一个是鸣叫(sing(self)),另一个是移动(move(self)),这两个函数就是类的方法(method)。
       类建好了之后,我将类实例化为一个叫mybird的对象,并利用这个对象对类的属性和方法进行访问。

子类

      鸟可以继续细分为鸡、鸭、鹅.....这就是所谓的子类。
class Chicken(Bird):                                           #继承上例中的Bird
    song="喔喔喔喔喔!"                                        #重写父类中的属性
    def move(self):                                            #重写父类中的方法
        print("这种移动方式已经废弃",end="--->")               #end的作用是把字符串末尾的换行符替换为“--->”
        super().move()                                         #调用父类中的方法(对象是没有super()的)
        print("跑跑跑跑跑")


myChicken=Chicken()
myChicken.move()
myChicken.sing()
输出
这种移动方式已经废弃--->飞飞飞飞飞
跑跑跑跑跑
喔喔喔喔喔!
      

多重继承

class Calculator:
    def calculate(self,expression):
        self.value=eval(expression)                         #计算字符串中的表达式
class Talker:
    def talk(self):
        print("结果为",self.value)
class TalkCalculator(Calculator,Talker):                    #本类不做任何事情,但是同时继承两个子类,这种行为叫做多重继承
    pass                                                    #pass是空语句,是为了保持程序结构的完整性。

myCal=TalkCalculator()
myCal.calculate("4+2")
myCal.talk()


小提示:

1.多态、封装与继承

多态:意味着可以对不同类的对象进行相同的操作。
封装:对外部世界隐藏类的细节。
继承:以普通的类为基础建立专门的类的对象。

2.面向对象概念

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
方法重载:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重载。
实例变量:定义在方法中的变量,只作用于当前实例的类。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
实例化:创建一个类的实例,类的具体对象。
方法:类中定义的函数。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

3.子类如何调用父类中的方法

class B(A):
def method(self, arg):
#        A.method(self,arg)                 #1直接写类名调用
#        super(B, self).method(arg)         #2用 super(type, obj).method(arg)方法调用
         super().method(arg)                #3在类定义中调用本类的父类方法,可以直接super().method(arg)

4.方法中的self

类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是 self

上一讲: Python菜鸟学习手册07----模块
下一讲: Python菜鸟学习手册09----面向对象续



如果有什么疑问欢迎到我的微信公众号提问~


你可能感兴趣的:(Python)