import 与 from ... import ...:

#types只是一个包,FunctionType只是这个包里的一个函数。这里用它来演示
import types
#如果要用FunctionType(),则要这样
print types.FunctionType #如果不想每次都写types前缀,就可以用from import
from types import FunctionType
print FunctionType #高端一点的说法是,from import会把FunctionType添加到当前的 命名空间 中
#这样就可以直接使用了,不然的话就要每次都指定来源
#不提倡使用from import *,尤其是项目比较大,模块比较多的时候,这样做虽然可以减少每次写前缀的次数
#但是很难知道函数等的来源,不好管理,出错的话调试起来很麻烦

=====================

class 类:

#python类
class A():
#__init__类似Java的构造函数,声明类的实例时自动执行,不返回任何东西
#参数self:类中的方法声明时都要默认有一个参数,并且是第一个位置(不是类的函数就不用写了)
#self代表这个类本身。虽然在函数声明时必须有self,但调用时是不用传参数的
def __init__(self):
pass
def myFunc(self, vara):
return 'this is myfunction %s' % vara
#实例化
a = A()
#调用类的方法时不用为self传参数,直接传你自己的参数就行了
a.myFunc('hello') #python继承
#把父类放在类名后的括号里就可以了,这里是B继承了A。B是子类,A是父类
class B(A):
def __init__(self):
#继承的意义在于可以把父类的能力扩展到子类上
#那么就应该在初始化子类的时候把这些初始配置在__init__中做好
#python要求手动显式的调用父类的__init__来完成初始化
A.__init__()
#另外python不支持任何形式的函数重载,比如参数数量啊,参数类型啊,在python这儿都不好使。
#总之就是不支持。一个函数就是一个函数,没多的。

================

其他特殊方法(以两个下划线开始的函数,如__init__):

class A():
def __init__(self):
pass #返回一个对象的字符串表示,当时用repr()函数是,其实际执行的是__repr__
def __repr__(self):
return 'this is repr func' #比较两个对象‘大小’,调用cmp()时执行__cmp__
def __cmp__(self, var):
#self是第一个对象,var是第二个对象。这里可以自己处理逻辑
#然后返回0相等,小于0 self小于var,大于0self大于var
pass #返回对象长度,调用len()时执行这个__len__
def __len__(self):
return 5 a = A()
#这里调用repr,会执行a的__repr__方法
print repr(a) #这里生命aa,然后a和aa比较,执行a的__cmp__方法,方法里面只写了pass站位,没有实际逻辑处理
aa = A()
print cmp(a, aa) #这里调用len,会执行a的__len__方法
print len(a)

注意:Java中的 == 比较的是地址,对应到python应该是 is ,而Java中的equals比较对象的内部的值,对应到python应该是 ==....:

a = 1
b = 1
print a is b, a == b

================================

类属性(对应Java的静态变量,很贴切):

"""
Java中的静态变量(在Pyhton中叫类属性)和实例变量(Python中叫数据属性)的区别是用static关键字区分的。在Python中则是按照声明的位置区分。
类属性紧跟类声明,而数据属性则只能出现在__init__()方法中。
"""
class B():
#var1紧跟在类声明后,这是类属性。这意味着所有B的实例个共同维护var1(同Java的static)
var1 = 1
def __init__(self):
#var2在__init__函数中声明,var2是数据属性,实例自己改动不会影响其他实例
self.var2 = 2

==================================

类的私有公有(Python没有protect类型):

"""
私有函数不可以从它们的模块外面被调用
私有类方法不能够从它们的类外面被调用
私有属性不能够从它们的类外面被访问
""" #一个Python函数,方法,或者属性是私有还是公有,完全取决于它的名字
"""
如果一个函数,方法或属性的名字是以两个下划线开始,但不是结束,他就是私有的。其他都是公有。
如果尝试在不允许的位置调用私有的东西会报错,提示没有这个东西,但其实是有的,只不过他是私有的
"""

devi into python 笔记(四)python的类的更多相关文章

  1. 【Python笔记】Python语言基础

    Python是一种解释性(没有编译).交互式.面向对象的语言 1.安装python编译器 版本:Python2.7比较普遍,Python不是向下兼容的软件,因此Python3.x有些东西不好找资料 2 ...

  2. 【Python笔记】Python 基础语法

    Python 标识符 在 Python 里,标识符由字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大小 ...

  3. 【Python笔记】Python变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

  4. guxh的python笔记四:迭代

    1,可迭代对象iterable,迭代器iterator,生成器generator 可迭代对象iterable: 实现__iter__方法的类.__iter__方法返回iterator或者generat ...

  5. Python笔记(5)类__方法与继承

    方法 类方法@classmethod,实例方法,静态方法@staticmethod,特殊方法,__init__ 形式上的区别:调用是通过类和实例进行,不能直接调用,有自己的特殊参数,如__init__ ...

  6. Python笔记(4)类__属性与描述符

    部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...

  7. python笔记四

    #!/usr/bin/env python3 from datetime import datetime, timedelta # datetime是模块,datetime模块还包含一个datetim ...

  8. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

  9. Python笔记(四)_字符串的方法

    字符串的方法 []表示该参数时可选的,start和end参数表示范围 count(sub[, start[, end]]) 返回sub在字符串里边出现的次数 find(sub[, start[, en ...

  10. python第四十七课——类属性和函数属性

    4.类属性和对象属性 类属性:定义在class内,函数外 对象属性:定义在构造函数的内部 演示:类和对象的关系 --> 生命周期 [注意]类加载早,对象加载晚 --> 晚的可以调用早的,早 ...

随机推荐

  1. tomcat优化系列:修改运行内存

    1.对于安装版的TOMCAT: 进入TOMCAT的安装目录下的bin目录,双击tomcat6w.exe.点击Java选项卡,可设置初始化内存,最大内存,线程的内存大小. 初始化内存:如果机器的内存足够 ...

  2. Codevs 1138 聪明的质监员 2011年NOIP全国联赛提高组

    1138 聪明的质监员 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 T 是一名质量监督员, ...

  3. Parameters

    Quote from: http://ss64.com/nt/syntax-args.html Parameters A parameter (or argument) is any value pa ...

  4. C++ 智能指针auto_ptr详解

    1. auto_ptr 的设计动机: 函数操作经常依照下列模式进行: 获取一些资源 执行一些动作 释放所获取的资源 那么面对这些资源的释放问题就会出现下面的两种情况: 一开始获得的资源被绑定于局部对象 ...

  5. 解决读写properties属性文件

    package com.kzkj.wx.utils; import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...

  6. EF 存储过程(上)

    目前,EF对存储过程的支持并不完善.存在以下问题:> EF不支持存储过程返回多表联合查询的结果集.> EF仅支持返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况.&g ...

  7. JS对于字符串的切割截取

    对于字符串的切割截取平时所用可能不是特别多,而且分的比较细,所以自备自查.有备无患. 由于之前所有均在一个demo测试,若是哪里打错了,敬请谅解.一些其余属性找时间继续添加. 1.函数:split() ...

  8. [C#]异步委托使用小计

    APM(=Asynchronous Programming Model(=异步编程模型)) 使用 IAsyncResult 设计模式的异步操作是通过名为 Begin操作名称 和 End操作名称 的两个 ...

  9. document.getElementById获取不到标签值

    var apliay=document.getElementById('apliay_ok'); 代码里指定有id="apliay_ok"的标签,但是获取不到,折腾半天原来是因为在 ...

  10. Laravel 5.1 事件、事件监听的简单应用

    ​ 有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作 ...