您的位置:首页 > 脚本大全 > > 正文

python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

更多 时间:2021-10-22 07:55:55 类别:脚本大全 浏览量:2218

python核心编程和python基础教程

从0开始的Python学习014面向对象编程推荐

简介

到目前为止,我们的编程都是根据数据的函数和语句块来设计的,面向过程的编程。还有一种我们将数据和功能结合起来使用对象的形式,使用它里面的数据和方法这种方法叫做面向对象的编程。

类和对象是面向对象编程的两个重要方面。对于类和对象的关系,举个例子就像学生和小明同学的关系一样。学生(类)是一个拥有共同属性的群体,小明同学(对象)是其中一个有自己特性的个体。

对于一个对象或类的变量被称为域,函数被称为类或对象的方法。

域有两种类型--属于每个对象或属于类本身,分别成为实例变量和类变量。

类使用class关键字创建,类的域和方法被列在一个缩进块中。

self

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

虽然你可以给这个参数任何名称,但是 强烈建议 你使用self这个名称——其他名称都是不赞成你使用的。使用一个标准的名称有很多优点——你的程序可以迅速识别它,如果使用self的话,还有些ide(集成开发环境)也可以帮助你。

给c++/java/c#程序员的注释
python中的self等价于c++中的self指针和java、c#中的this参考。

你一定很奇怪python如何给self赋值以及为何你不需要给它赋值。举一个例子会使此变得清晰。假如你有一个类称为myclass和这个类的一个实例myobject。当你调用这个对象的方法myobject.method(arg1, arg2)的时候,这会由python自动转为myclass.method(myobject, arg1, arg2)——这就是self的原理了。

这也意味着如果你有一个不需要参数的方法,你还是得给这个方法定义一个self参数

(这个概念好长啊。。。。。。)

class 类名():
    代码块

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • '''the first class
  •   from liu
  •   我们使用class语句后跟类名,创建了一个新的类。这后面跟着一个缩进的语句块形成类体。在这个例子中,我们使用了一个空白块,它由pass语句表示。
  •  
  • 接下来,我们使用类名后跟一对圆括号来创建一个对象/实例。(我们将在下面的章节中学习更多的如何创建实例的方法)。为了验证,我们简单地打印了这个变量的类型。它告诉我们我们已经在__main__模块中有了一个person类的实例。
  •  
  • 可以注意到存储对象的计算机内存地址也打印了出来。这个地址在你的计算机上会是另外一个值,因为python可以在任何空位存储对象。
  •   '''
  • class person:
  •   pass # 空块
  •  
  • p = person()
  • print (p)
  • print(__doc__)
  • 运行结果

    python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    我们使用class语句后跟类名,创建了一个新的类。这后面跟着一个缩进的语句块形成类体。在这个例子中,我们使用了一个空白块,它由pass语句表示。

    接下来,我们使用类名后跟一对圆括号来创建一个对象/实例。为了验证,我们简单地打印了这个变量的类型。它告诉我们我们已经在__main__模块中有了一个person类的实例。

    可以注意到存储对象的计算机内存地址也打印了出来。这个地址在你的计算机上会是另外一个值,因为python可以在任何空位存储对象。

    对象的方法

    对象的方法其实就是一个函数,只不过在这个函数会有一个特别的参数self。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • class person:
  •   def sayhi(self):
  •     print('hello,how are you?')
  •  
  • p = person()
  • p.sayhi()
  • 运行结果

    python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    这个self感觉不到它的作用,但是还是要在参数中定义这是为什么呢?

    去掉self

    python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    从报错中看出系统在调用这个类方法的时候默认给它传了一个参数,所以我们必须要有这个self,不为别的,因为报错。。。。。。

    __init__方法

    init是一个初始化块,在对象被建立的同时运行这个代码块,为你的对象初始化。需要注意的是名称的开始和结尾都要有两个下划线。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • '''__init__方法
  •   __init__一个对象被建立的时候,马上运行。这个方法是对你的对象的初始化。
  •   这个名称的开始和结尾都是双下划线。'''
  •  
  • class person:
  •   def __init__(self,name):
  •     self.name = name
  •  
  •   def sayhi(self):
  •     print('hello,my name is ',self.name)
  •  
  • p = person('happyliu')
  • p.sayhi()
  • 运行结果

    python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    感觉效果不明显。。。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • class person:
  •   def __init__(self,name):
  •     print('这是初始化块')
  •     self.name = name
  •  
  •   def sayhi(self):
  •     print('hello,my name is ',self.name)
  •  
  • p = person('happyliu')
  • p.sayhi()
  • python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    这样就好啦。

    类与对象的变量

    类的变量 由一个类的所有对象(实例)共享使用。

    对象的变量 由类的每个对象/实例拥有。

    可以理解为类的变量是这个类下所有对象公用的,而对象的变量是这个对象私有的。

    一个很长的例子

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • class person:
  •   population = 0
  •  
  •   def __init__(self,name):
  •     self.name = name
  •     print('initalizing %s' % self.name)
  •  
  •     person.population += 1
  •  
  •   def __del__(self):
  •     print('%s says bye.' % self.name)
  •  
  •     person.population -= 1
  •  
  •     if person.population == 0:
  •       print('i am the last one.')
  •     else:
  •       print('there are still %d people left.' % person.population)
  •  
  •   def sayhi(self):
  •     print('hi, my name is %s.' % self.name)
  •  
  •   def howmany(self):
  •     if person.population == 1:
  •       print('i am the only person here.')
  •     else:
  •       print('we have %d persons here.' % person.population)
  •  
  • happy = person('happyliu')
  • happy.sayhi()
  • happy.howmany()
  •  
  • bob = person('bob james')
  • bob.sayhi()
  • bob.howmany()
  •  
  • del bob
  •  
  • happy.sayhi()
  • happy.howmany()
  • 运行结果

    python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    像__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。

    使用不同的对象的时候,就会调用类的方法,但是传的参数是这个对象自己的,所以我们面向对象的编程是非常灵活的。

    继承

    class 子类(父类):
        代码块

    面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过 继承 机制。继承完全可以理解成类之间的 类型和子类型 关系。

    人是父类,男人是子类,小明是对象(小明没有对象,(¬︿̫̿¬☆))。

    一个子类型在任何需要父类型的场合可以被替换成父类型,即对象可以被视作是父类的实例,这种现象被称为多态现象。

    另外,我们会发现在 重用 父类的代码的时候,我们无需在不同的类中重复它。而如果我们使用独立的类的话,我们就不得不这么做了。

    举个栗子

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • class schoolmember:
  •   '''represents any school member.'''
  •   def __init__(self,name,age):
  •     self.name = name
  •     self.age = age
  •     print('(initialized schoolmember: %s)'%self.name)
  •  
  •   def tell(self):
  •     '''tell my details.'''
  •     print('name:%s age:%d'%(self.name,self.age))
  •  
  • class teacher(schoolmember):
  •   '''represents a teacher.'''
  •   def __init__(self,name,age,salary):
  •     schoolmember.__init__(self,name,age)
  •     self.salary = salary
  •     print('(initialized teacher: %s)' % self.name)
  •  
  •   def tell(self):
  •     schoolmember.tell(self)
  •     print('salary:"%d"' % self.salary)
  •  
  • class student(schoolmember):
  •   '''represents a student.'''
  •   def __init__(self, name, age, marks):
  •     schoolmember.__init__(self,name,age)
  •     self.marks = marks
  •     print('(initialized student: %s)' % self.name)
  •     
  •   def tell(self):
  •     schoolmember.tell(self)
  •     print('marks: "%d"'%self.marks)
  •  
  • t = teacher('mr,liu',25,3000)
  • s = student('swaroop', 22, 75)
  •  
  • print()
  •  
  • members = [t,s]
  • for member in members:
  •   member.tell()
  • 运行结果

    python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)

    为了使用继承,我们把基本类的名称作为一个元组跟在定义类时的类名称之后。然后,我们注意到基本类的__init__方法专门使用self变量调用,这样我们就可以初始化对象的基本类部分。这一点十分重要——python不会自动调用基本类的constructor,你得亲自专门调用它,schoolmember.__init__(self,name,age)就是它,开始的时候无限报错的就是它。

    小总结

    我们已经研究了类和对象的多个内容以及与它们相关的多个术语。通过本章,你已经了解了面向对象的编程的优点和缺陷。python是一个高度面向对象的语言,理解这些概念会在将来有助于你进一步深入学习python。

    以上所述是小编给大家介绍的python面向对象编程详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!

    原文链接:https://www.cnblogs.com/liuhappy/p/10640952.html

    您可能感兴趣