四、面向对象编程

提纲:面向对象的基本思想

  类与对象的关系

  类的结构与成员

  Python中的魔法函数

  按功能要求完成类的设计与实例化对象

 

一切皆对象

BIFS:

type()返回数据类型 

id()查看对象ID

dir() 查看对象下变量及函数

issubclass(), isinstance(), super(),类,实例,调父类

hasattr(), getattr(), setattr(),delattr(), 类属性

globals(), locals(), 全局与局部的名称空间

import(), reload(),模块的导入与重载

 

创建类:

class关键字

指定继承

定义类的成员

  数据成员

    类变量

    实例对象

  方法成员

    类方法

    实例对象

实例化类

类的创建与初始化

例子:

完成一个学生类的设计

能查看学生总人数,全部学生姓名,毕业分数标准,已经毕业学员数量

实现考试方法,成绩分数如果大于60分代表其通过考试,分数计入该学员总分

若该学员累计分数达到1000分钟,该学员即毕业

实现查分方法,向该学员返回是否已经毕业,或者还差多少分数才能毕业

实现查询所有已毕业学生数量的功能

实现查询所有学生数量的功能

实现查询所有学生姓名的功能

 

class Student():
  student_total=0
  student_list=[]
  student_graduated=0
  pass_score=1000

def __init__(self,name,age,gender):
  self.name=name
  self.age=age
  self.genger=gender
  self.score=0

  Student.student_total+=1
  Student.student_list.append(name)


def exam(self,score):
  if score<60:
    return 'failed'
  else:
    self.score+=score
    str1='good, your score is now '+str(self.score)

  if self.score>=Student.pass_score:
  Student.student_graduated+=1

  return str1

#david=Student('david',22,'male')
#type(david)

  def check(self,): #只要是对象的方法,都要以self开头
    if self.score<Student.pass_score:
      return 'you have',Student.pass_score-self.score,'to achieve'
    else:
      return 'you have graduated'

  @classmethod
  def get_student_graduated(cls,): #cls ?
    return Student.student_graduated

  @classmethod
  def get_student_total(cls,): #cls ?
    return Student.get_student_total

  @classmethod
  def get_student_list(cls,): #cls ?
    return Student.get_student_list


  @staticmethod
  def static1():
    return'this is a static method form Student,it is can be called by both the class and the instance'
xiaoming=Student('xiaoming',22,'male')
xiaoming=Student('ximing',22,'male')


Student.get_student_list()

#有问题,未达到预期的效果

<bound method Student.get_student_list of <class '__main__.Student'>>

 

 

静态方法(普通方法):

  定义的时候使用@staticmethod装饰器

  静态方法没有参数限制,不需要实例参数self和类参数cls    cls是class的简写

  静态法可以通过类名访问,或者实例访问

 

 

 私有控制 双下划线 "__"

 

 

魔术方法

如果对象实现(重载)了这些方法中的某一个,那么错方法就会在特殊的情况下被Python所调用,

定义自己想要的行为,这些会自动发生。

经常是两个下划线包围来命名的。

如:__init__

当x=myclass的时候,__init__并不是第一个被调用的方法

还有一个叫__new__的方法,来构造这个函数,同样,结束时也有一个 __del___方法

 

class myclass():
  def __init__(self,):
    print('被__init__')

  def __del__(self,):
    print('被__del__')

cl=myclass()
del cl

 

 作业:

完成简单类的设计

新建类并修改其实例的切片访问

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-02-14 12:40  谦曰盛  阅读(180)  评论(0编辑  收藏  举报