面向对象第二节

要点:

1. 封装,对象中嵌套对象

2. pickle,load,切记,一定要先导入相关的类

回顾上一节:

面向对象三大特性:

封装、继承、多态(多种类型、多种形态)

关于多态,任意参数的函数有如下特性:

  1. def func(arg):
  2. print(arg)
  3. func(1)
  4. func("Alex")
  5. func([11,22,33])

关于arg参数:

  1. class A:
  2. pass
  3. class B(A):
  4. pass
  5. class C(A):
  6. pass
  7. #arg参数,必须是A类型或是A的子类类型
  8. def func(A arg):
  9. print(arg)
  10.  
  11. #obj = B()
  12. #obj = C()
  13. obj = A()
  14. func(obj)

面向对象中类成员

字段:静态字段、普通字段

P.S:静态字段代码加载的时候已经创建

  1. class Foo:
  2. #字段(静态字段)
  3. CC = 123
  4.  
  5. def __init__(self):
  6. #字段(普通字段)
  7. self.name = "Alex"
  8.  
  9. def show(self):
  10. print(self.name)
  1. class province:
  2. country = "China"
  3. def __init__(self,name):
  4. self.name = name
  5. #一般情况,自己访问自己字段
  6. #规则:
  7. #普通字段只能用对象访问
  8. #静态字段用类访问(万不得已时用对象访问)
  9. hn = province("Henan")
  10. hb = province("Hebei")
  11. print(hn.name) #Henan
  12. print(province.country) #China
  13. print(hn.country) #China

方法:

所有的方法属于类

1.普通方法,至少一个self,对象执行

2.静态方法,任意参数,类执行(对象执行)

3.类方法,至少一个class,类执行(对象执行)

  1. class province:
  2. country = "China"
  3.  
  4. def __init__(self,name):
  5. self.name = name
  6. #普通方法,用对象去调用执行(方法属于类)
  7.  
  8. def show(self):
  9. print(123)
  10.  
  11. @staticmethod
  12. def f1(cla,arg1,arg2):
  13. print(arg1,arg2)
  14. #静态方法,用类调用执行.(当方法内部不需要对象中封装的值时,可以将方法写成静态方法)
  15.  
  16. @classmethod
  17. def f2(cls): #class
  18. cls #类名,()创建对象
  19. #cls()
  20. print(cls)
  21.  
  22. obj = province("Henan")
  23. obj.show() #
  24. province.f1(province,1,2) #1 2
  25. province.f2() #<class '__main__.province'>
  1. class pager:
  2.  
  3. def __init__(self,all_count):
  4. self.all_count = all_count
  5.  
  6. @property
  7. def all_pager(self):
  8. a1,a2 = divmod(self.all_count,10)
  9. if a2 == 0:
  10. return a1
  11. else:
  12. return a1 +1
  13.  
  14. @all_pager.setter
  15. def all_pager(self,value):
  16. print(value)
  17.  
  18. @all_pager.deleter
  19. def all_pager(self):
  20. print("del all_pager")
  21.  
  22. p = pager(101)
  23. print(p.all_count) #字段,101
  24. #result = p.all_pager()#方法
  25. ret = p.all_pager
  26. print(ret) #
  27. p.all_pager = 111 #
  28. del p.all_pager #del all_pager

属性:

不伦不类的东西

具有方法的写作形式,具有字段的访问形式

  1. class foo:
  2.  
  3. __cc = ""
  4.  
  5. def __init__(self,name):
  6. self.name = name
  7.  
  8. def f1(self):
  9. print(self.name)
  10.  
  11. obj = foo('alex')
  12. print(obj.name) #alex
  13. obj.f1() #alex
  1. class Foo:
  2.  
  3. __cc = ""
  4.  
  5. def __init__(self,name):
  6. self.name = name #定义一个私有的普通字段
  7.  
  8. def f1(self):
  9. print(self.name)
  10.  
  11. @staticmethod
  12. def f3():
  13. print(Foo.__cc)
  14.  
  15. #print(Foo.__cc)
  16. obj = Foo("ddd")
  17. obj.f3() #
  18. Foo.f3() #

私有普通方法

  1. class Foo:
  2.  
  3. __cc = ""
  4.  
  5. def __init__(self,name):
  6. self.__name = name #定义一个私有的普通字段
  7.  
  8. def f1(self):
  9. print(self.__name)
  10.  
  11. class Bar(Foo):
  12.  
  13. def f2(self):
  14. print(self.__name)
  15.  
  16. obj = Bar("alex")
  17. obj.f1() #alex #通过调用类中的公有方法来执行私有方法

私有静态法

  1. class Foo:
  2.  
  3. def __init__(self,name):
  4. self.__name = name #定义一个私有的普通字段
  5.  
  6. @staticmethod
  7. def f2(num):
  8. print(num)
  9.  
  10. @staticmethod
  11. def f3(num):
  12. print(num)
  13.  
  14. Foo.f3(10) #
  1. class Foo:
  2. #构造方法
  3. def __init__(self,name,age):
  4. self.name = name
  5. self.age = age
  6.  
  7. #析构方法
  8. def __del__(self):
  9. pass
  10.  
  11. def __call__(self):
  12. print("call")
  13.  
  14. def __str__(self):
  15. return("%s-%d"%(self.name,self.age))
  16.  
  17. '''obj = Foo()
  18. obj() #对象()执行call
  19. #Foo()()'''
  20.  
  21. obj1 = Foo('alex',74)
  22. obj2 = Foo('eric',93)
  23. print(obj1,obj2) #alex-74 eric-93
  24.  
  25. ret =str(obj1)
  26. print(ret) #alex-74
  27.  
  28. #获取对象中封装的数据
  29. ret = obj1.__dict__
  30. print(ret) #{'name': 'alex', 'age': 74}

Python笔记总结week8的更多相关文章

  1. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  2. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  3. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  4. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  5. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  6. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  7. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

  8. python笔记 - day7-1 之面向对象编程

    python笔记 - day7-1 之面向对象编程 什么时候用面向对象: 多个函数的参数相同: 当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可: ...

  9. python笔记 - day7

    python笔记 - day7 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 面向对象,初级篇: http://www.cnblog ...

随机推荐

  1. stack栈

    栈(statck)这种数据结构在计算机中是相当出名的.栈中的数据是先进后出的(First In Last Out, FILO).栈只有一个出口,允许新增元素(只能在栈顶上增加).移出元素(只能移出栈顶 ...

  2. Android的学习第六章(布局一LinearLayout)

    今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...

  3. centos6.x开机卡死

    问题描述: centos6.x开机卡死在进度条处 远程登录,查看系统日志,看看卡在哪儿 通过远程连接,tail -fn 20 /var/log/messages 发现报错: init: prefdm ...

  4. django之DB操作

    先来区分一下什么是一对一.多对多 一对一:子表从母表中选出一条数据一一对应,母表中选出来一条就少一条,子表不可以再选择母表中已被选择的那条数据: 一对多:子表从母表中选出一条数据一一对应,但母表的这条 ...

  5. sharepoint 增删改查

    前端提交 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MeetingOneW ...

  6. Oracle(创建视图)

    概念: 视图:所谓视图就是提取一张或者多张表的数据生成一个映射,管理视图可以同样达到操作原表的效果,方便数据的管理以及安全操作. 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关 ...

  7. 为什么当多个inline-block的div中,如果有的div没有内容而有的div有内容,有内容的会下沉?

    为什么当多个inline-block的div中,如果有的div没有内容而有的div有内容,有内容的会下沉? 就像这样 两个div高度相同,第二个我写了一个1当作 有内容吧,它就下沉了... 奇怪... ...

  8. php : 基础(4)

    流程控制 循环结构 循环的中断 循环中,有两种中断语句可以使用: break: 用于完全终止某个循环,让执行流程进入到循环语句后面的语句: continue: 用于停止当前正在进行的当次循环,而进入到 ...

  9. Jquery Json 下拉联动

    #region dataTable转换成Json格式 /// <summary> /// dataTable转换成Json格式 /// </summary> /// <p ...

  10. Java一个汉字占几个字节(详解与原理)

    1.先说重点: 不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的,可能是2个.3个.4个字节: 2.以下是源码: @Test public void test1() thr ...