码迷,mamicode.com
首页 > 其他好文 > 详细

19-面对对象编程

时间:2018-04-12 17:58:17      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:dict   2.7   显示   统一   区别   comment   UI   必须   它的   

Object-oriented programming 面向对象编程

Object-oriented design 面向对象设计

  • 类的定义

  • 面向对象编程和函数式编程的区别

  • 类的传参

类的定义

? 类是一个抽象的概念,任何东西都可以是一个类,比如,苹果是一个类,香蕉是一个类,动物又是一个类,但是类又不是绝对的,类是一个相对的概念,比如,动物类可以实例化为老虎,可以实例化为狮子,但是,狮子又可以是一个类。所以说类是相对的,不是绝对的。

? 实例化是我们对类的详细描述。将类进行实例化,我们可以得到对象这一概念。

? 对象就是基于类二创建的一个具体的事物(具体存在的)。

? 首先,我们来定义一个类:

  
class Foo(object):
   ‘‘‘
  函数文档字符
  ‘‘‘
   role = "new_class"  #静态变量
   def func(self): #动态变量
       pass

对于类的定义必须遵循以下结构

class 类名():? 函数体

? 这个是类最基本的结构,其中必须有关键字 class表示这是一个类class后加类名,一般我们对类的命名方法和变量的命名方法要求相同,但是我们约定俗称的是类名的第一个字符使用大写,再python2.7版本之前我们类名之后可以不加括号和object,但是再python3.x版本之中,python加入了新式类的概念,所以一般我们会在类名后面加上括号和object。

面向对象编程的思想

? 不关注程序执行的过程

? 关心的是一个程序中的角色以及角色与角色之间的关系

经典类和新式类

  1. 只有在python2中才分新式类和经典类,python3中统一都是新式类

  2. 新式类和经典类声明的最大不同在于,新式类必须继承至少一个父类

  3. 在所有类中,不管是否显示声明父类都有一个默认继承object父类

  
#经典类
class Foo:
   pass
?
#新式类
class Foo(object):  #括号中可谓其他父类
   pass
?
#在python3中,上述两种方式都是新式类

 

在类中,我们创建的静态变量和动态变量要怎么进行调用和改变呢。

  
class Foo(object):
   role = "test"
   def test(self):
       test1 = 123
print(Foo.__dict__)   #我们可以通过__dict__方法打印出类中所有包含的方法和变量
print(Foo.__dict__["role"])  #打印出静态变量的值,动态变量也可以这样打印出来。
Foo.__dict__["role"] = 222  #虽然这样可以打印出变量的值,但是却不能对值进行修改,如果这样对值进行修改的话,会报错
#如果我们需要对值进行修改的话我们需要怎样做呢
Foo.role = 222  #对值进行修改
print(Foo.role)  #这种办法同样可以将类的静态\动态变量打印出来,且这种方法较为方便,我们以后经常使用这种办法对值进行操作。

 

组合

继承是一个子类和父类之间的关系,那么组合是一个类与另一个类之间的关系

组合: 表示的是一种什么有什么的关系

当一个类的对象作为了另一个类对象的属性,这样就说这两个类组合了。

组合的意义:独立的对象不能发挥他的作用,必须依赖一个对象。

  
#首先我们先写一个程序认识一下组合
class Teacher(object):
   def __init__(selt,name ,sex,age,birthday)
  self.name = name
       self.sex = sex
       self.sge = age
       self.birthday = birthday
class Birrthday(object):
   def __init__(self,year,month,day)
  self.year = year
       self.month = month
       self.day = day
birthday = Birthday(1997,2,15)  
test = Teacher("kuoiea","man",21,birthday)
print(test.birthday.day)    
#在这个程序中,对象birthday作为一个值传入了类Teacher里面,那么self.birthday就存储了Birthday类的内存地址
#我们就可以通过test.birthday.day获取到birthday里面的日期了

 

初识继承

? python中,一切皆对象....

实例化过程

  
1. 创建一个对象
2. __ init __给对象添加一些属性,对象默认的名字self
3. 将这个self所指向的内存空间返回给实例化它的地方

使用这个对象可以找两个东西

  1. 对象所在内存空间中存储的东西

  2. 类对象指针所指类中的所有方法和静态变量

  1. 对象着名字的时候,先找自己内存空间中的名字,再找类的

  2. 对象没有权力修改类中的静态变量和方法

  3. 用类名操作静态变量(属性)

  4. 类名:实例化对象 调用静态属性 执行方法

  5. 交互:对象可以作为参数传递给类中的方法

  6. 组合:对象可以作为另一个对象的属性 ---->表示一种什么有什么的关系

面向对象的三大特性

  1. 继承

  2. 多态

  3. 封装

? 在python3中,所有的类都会默认继承object类,继承了object的所有类都是新式类,如果一个类没有继承任何父类,那么__ base __这个类就会显示<class ‘object‘>

  
class Foo():
   pass
?
print(Foo.__base__)
?
>>><class ‘object‘>

? python中可以继承多个类。

  
class Foo:pass
class Foo2:pass
?
class test(Foo,Foo2):
   pass

父类:括号里面的都是父类 (基类、超类)

子类:class之后的类就是子类 (派生类)

? 继承父类的前提方法就是自己本身没有同名方法。

? 对象使用名字的顺序:

先找对象自己内存空间中的,再找对象自己类中的,再找父类中的。

self.名字,不要看self当前在哪个类里,要看self到底是谁的对象。

19-面对对象编程

标签:dict   2.7   显示   统一   区别   comment   UI   必须   它的   

原文地址:https://www.cnblogs.com/kuoiea/p/8808985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!