python --- 面向对象编程

面向过程编程(百度 or google):

  (1) 定义:

  (2)对比于函数式和面向过程编程的优缺点:

python中的类:

  (1)定义(百度 or google):

  (2)说明: python中的类由属性与方法构成,类中的方法是对属性的使用或修改。对比于游戏中的角色人物,有力量值,法术值,物防,法防等这些属性,而游戏角色的技能是对这些属性的利用,游戏角色的升级或掉级会修改这些值,对于类而言,它的技能就是方法,这些方法或修改或使用类的属性。

  (3)应用:类一般是对某样真实物体的抽象建模,它用于在计算机程序中批量产生这类东西。就好比在游戏中,一种角色,有成千上万的玩家使用,由于每个玩家的等级,装备等差异,属性值各不相同,但这些角色的属性都是由最基础的构成(力量值,法术值,物防,法防等),角色的技能效果也是一样的,对于类而言只需修改一下基础属性就可以在程序中批量的创建它们。

  (4)python中类的语法:    

class Person(object):
    ethnicity = "Humanity"

    def __init__(self, name, age, wages):
        ‘‘‘
        构造函数,用于初始化对象的属性
        ‘‘‘
        self.name = name
        self.__age = age  #私有属性
        self.wages = wages
        pass

    def __del__(self):
        ‘‘‘
        析构函数,在对象被销毁或程序结束时执行
        ‘‘‘
        print("__del()__")
        pass

    def func1(self):
        ‘‘‘
        第一个方法,展示对属性的利用
        ‘‘‘
        print("This is func1()")
        print("%s: age:%s  wages:%s" % (self.name, self.__age, self.wages))
        pass

    def func2(self):
        ‘‘‘
        第二个方法,展示对属性的修改
        ‘‘‘
        self.__age += 1
        self.wages -=1500
        print("This is func2()")
        print("%s: age:%d  wages:%d" % (self.name, self.__age, self.wages))
        pass

    def get_info(self):
        print("name:%s\nage:%s\nwages:%s\nethnicity:%s" % (self.name, self.__age, self.wages, self.ethnicity))

person_1 = Person("Jack", 21, 10000) #用类实例化一个人
print(person_1.name) #调用类中的属性
person_1.func1() #调用类中的方法
person_1.func2()
person_1.get_info()

>>>
Jack
This is func1()
Jack: age:21  wages:10000
This is func2()
Jack: age:22  wages:8500
name:Jack            #get_info执行结果    
age:22
wages:8500ethnicity:Humanity
__del()__             #析构函数执行结果

    在本例中对一个人用类进行了最基本最简单的建模,演示了python中类的语法和应用。

    构造函数:用于初始化对象的基本属性。比如在本例中对象的(name, age, wages)三个基本属性,用构造函数进行初始赋值。

    类属性:定义在构造函数上面的变量。一般批量制造出的对象的公共属性(且不会被经常改变)用这种方式定义。(比如游戏角色的种族,职业等)

    实例属性:定义在构造函数里的变量。批量产生的对象的差异属性或可能会被经常改变的默认属性(以默认参数实现)用这种方式定义。(比如玩家的昵称,等级等)

    析构函数:在对象被销毁或程序结束时自动执行。一般用于关闭类中其他方法打开的临时文件或数据库连接。

    私有属性:只能通过类中的方法修改或查询,在类的外部无法被访问。  定义时只需在变量名前加上‘__’即可,可以使用同样的方法定义私有方法(在函数命前加上‘__’,一般用于类中某些方法的更底层的方法,外部无法调用)。在本例中__age就是私有属性,它无法通过像person_1.name的这种方式使用。

  (5)类的继承与派生:

class Person(object):       #本例中的基类
    def __init__(self, name, gender, age):
        self.name = name
        self.gender = gender
        self.age = age

    def my_message(self):
        print(‘‘‘-----message of %s-----
        name:%s
        gender:%s
        age:%s‘‘‘ %(self.name, self.name, self.gender, self.age))

class Worker(Person):         #Worker类继承Person类
    def __init__(self, name, gender, age, wage):
        super(Worker, self).__init__(name, gender, age) #调用父类的构造函数,调用父类的其他方法只需改变函数名和参数
        self.wage = wage

    def get_paid(self):
        print("my wage: $%s" % self.wage)

class Driver(Worker):           #Driver类继承Worker类
    def __init__(self, name, gender, age, wage, driving_age):
        super(Driver, self).__init__(name, gender, age, wage)
        self.driving_age = driving_age

    def drive(self):
        print("My driving age is %s years", self.driving_age)
        print("driving...")
print("First Class")
p1 = Person("John", ‘M‘, 35)
p1.my_message()       #调用类内方法
print(‘\n‘)
print("Second Class")
w1 = Worker("Lily", ‘F‘, 30, 5000)
w1.my_message()       #调用父类方法
w1.get_paid()         #调用类内方法
print(‘\n‘)
print("Third Class")
d1 = Driver("Jack", ‘M‘, 40, 7500, 15)
d1.my_message()        #调用父类的父类方法
d1.get_paid()          #调用父类方法
d1.drive()             #调用类内方法

>>>
First Class
-----message of John-----
        name:John
        gender:M
        age:35

Second Class
-----message of Lily-----
        name:Lily
        gender:F
        age:30
my wage: $5000

Third Class
-----message of Jack-----
        name:Jack
        gender:M
        age:40
my wage: $7500
My driving age is %s years 15
driving...

    说明:好比游戏角色的觉醒(或者转职), 往往会在原来的角色基础上增加新的属性和技能。在类中同样有这一操作,叫做类的继承与派生。程序中的类如果只有继承,那不如直接用原来的类,所以一般来讲有继承就有派生。而继承与派生的作用就是为类增添新属性与新方法。

    Worker类:Worker类继承了Person类,相比与基类他增加了一个属性(wage)和一个方法(get_paid())

    Driver类:同理继承了Worker类, 增加了一个属性(driving_age)和一个方法(drive())

    可以看到worker类它既可以使用自己的属性和方法,它也可以使用父类的属性和方法,这就好比对现实的一种分类下面又有许多更详细的分类。现实中,人是一个总类,下面可以分出工人,白领,公务员,企业家等等,而工人又可以分出石油工人,铁路工人,环卫工人等等,但自上而下,它们都有共性,自下而上,它们又有差异。而计算机程序要对现实世界抽像于是便有了类的继承与派生。

    而观察Driver类,它不仅可以使用自己和父类的属性和方法,还可以使用父类的父类的属性和方法(可以说成隔代继承)。所以,我们可以知道类可以多代继承,而且不管继承了多少代都可以使用类的第一代到它本身中的任何一个方法或属性。

    注意:如果子类中的属性或方法与父类中的相同,以子类中的为准,好比全局变量与局部变量。(类是面向对象的最重要部分,学习计算机程序的我们都应认真学习。)

(PS:由于本人目前还是学生,发现周围许多计算机专业的学生对学习程序代码兴趣薄弱,不愿意接触代码,故目前所写博客尽量简化代码,对于库,内置函数等都是以最简化最常用的方式使用,

对于概念,定义等以最简单的方式说明,尽量避免官方专业用语的说法,以激发初学者们学习的兴趣。由于本人水平有限,难免有错误出现,望指出改正,共同学习进步。)

时间: 2024-10-20 14:50:01

python --- 面向对象编程的相关文章

Python面向对象编程-封装

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

(转)Python 面向对象编程(一)

Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程.下面就来了解一下如何在Python中进行对象编程. 一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class className: block 注意类名后面有个冒号,在block块里面就可以定义属性和方法了.当一个类定义完之后,就产生了一个类对象.类对象支持

python 面向对象编程(一)

一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class className: block 注意类名后面有个冒号,在block块里面就可以定义属性和方法了.当一个类定义完之后,就产生了一个类对象.类对象支持两种操作:引用和实例化.引用操作是通过类对象去调用类中的属性或者方法,而实例化是产生出一个类对象的实例,称作实例对象.比如定义了一个people类: cl

Python面向对象编程总结(上)

在我学习python之前一直认为python是脚本型语言,不能用面相对象的方法进行编程,当我学习了python之后我发现我错了,python不但支持面相对象而且使用的人还挺多的.我从接触编程开始就是学习的Java语言,所以面相对象编程的思想在我的脑海里根深蒂固,让我一下从面向对象编程转换到面向过程编程还有一些不适应呢,所以我就来总结一下python面向对象编程的方法和过程.我将按照面向对象的构成要素来分析,依次为类和实例.属性.方法.封装.继承.多态,如果有什么问题还请大家积极指出,我所用的版本

python面向对象编程(OOP)

python作为一种解释性语言,其主要的编程方式就是面向对象,而且python的框架django也是主要面向对象的编程. 类(class)和对象(object) 类(class)是用来描述具有相同属性(attribute)和方法(method)对象的集合.对象(object)是类(class)的实例.比如学生都有名字和分数,他们有着共同的属性.这时我们就可以设计一个学生类,用来记录学生的名字和分数,并自定义打印出来. 属性(attribute):类里面用于描述所有对象共同特征的变量或数据.比如此

Python面向对象编程指南(高清版)PDF

Python面向对象编程指南(高清版)PDF百度网盘链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网盘手机App,操作更方便哦内容简介 · · · · · · Python是一种面向对象.解释型的程序设计语言,它已经被成功应用于科学计算.数据分析以及游戏开发等诸多领域.本书深入介绍Python语言的面向对象特性,全书分3个部分共18章.第1部分讲述用特殊方法实现Python风格的类,分别介绍了init

python面向对象编程进阶

python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj = Foo() 5 6 isinstance(obj, Foo) issubclass(sub, super)检查sub类是否是 super 类的派生类 1 class Foo(object): 2 pass 3 4 class B

Python面向对象编程——简介

Python面向对象编程--简介 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 . 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式. 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式. 两种最重要的编程范式分别是面向

python面向对象编程

java和c#只支持面向对象编程,python即可支持面向对象也可以支持函数式编程. 面向对象两个重要的概念:  1.类 2.对象 函数式 def sendemail(email,msg):            函数 print("8888") 面向对象 class Myclass: def sendmail(self,email,msg):      函数定义在类中第一个参数必须是self print("8888")              函数在类中定义叫方

Python面向对象编程(二)

本文转自博客园海子的文章http://www.cnblogs.com/dolphin0520/archive/2013/03/29/2986924.html 再次发出感谢海子的分享,本人阅读了多次,受益匪浅! 在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装. 下面就来了解一下另外两大特征:继承和多态. 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的类称为父类或者超类.也可以称作基类,继承的类称为子类.并且Python支持多继承,能够让