Python 学习笔记(十四)Python类(二)
创建简单的类
新式类和经典类(旧式类)
Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object
新式类都从object继承,经典类不需要
新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索
新式类相同父类只执行一次构造函数,经典类重复执行多次
截止到python2.1,只存在旧式类。旧式类中,类名和type是无关的:如果x是一个旧式类,那么x.__class__定义了x的类名,但是type(x)总是返回<type 'instance'>。这反映了所有的旧式类的实例是通过一个单一的叫做instance的内建类型来实现的,这是它和类不同的地方。
新式类是在python2.2为了统一类和实例引入的。一个新式类只能由用户自定义。如果x是一个新式类的实例,那么type(x)和x.__class__是一样的结果(尽管这不能得到保证,因为新式类的实例的 __class__方法是允许被用户覆盖的)。
>>> class AA: #经典类(旧式类)
pass >>> aa =AA()
>>> type(aa)
<type 'instance'>
>>> type(AA)
<type 'classobj'>
>>> aa.__class__
<class __main__.AA at 0x000000000396E348>
>>> class BB(object): #新式类
pass >>> bb = BB()
>>> type(bb)
<class '__main__.BB'>
>>> bb.__class__
<class '__main__.BB'>
>>> print aa
<__main__.AA instance at 0x000000000390ECC8>
>>> print bb
<__main__.BB object at 0x0000000002B00B00>
>>>
编写方法
示例1:
#! /usr/bin/env python
# coding =utf-8 #通常类名首字母大写 class Person(object):
h =1.8 #属性
def getName(self): #定义一个方法,第一个参数必须是self,而且必须写上,self是类的实例,而非类
print "My name is lily." def color(self,col):
print "The sky is {0}".format(col) p = Person() #把类实例化,p就是实例对象
p.getName() #调用实例里面的方法或者属性
p.color("blue")
print p.h p.a="hello" #给对象赋了一个属性
print p.a p.h =2.8
print p.h
示例2:
#!/usr/bin/env python
#coding=utf-8 """
地址的类PersonAddress
属性 人员的姓名| 人员的EMAIL
方法 访问每个属性|修改email地址
""" class PersonAddress(object): name ="zhangsan"
email="zhangsan@gmail.com" def aboutPerson(self): #self必须写上
print "NAME:",PersonAddress.name #访问属性
print "EMAIL:",PersonAddress.email def changeEmail(self,email):
PersonAddress.email =email p = PersonAddress()
p.aboutPerson()
p.changeEmail("cc@gamail.com")
p.aboutPerson()
类和实例
Python 学习笔记(十四)Python类(二)的更多相关文章
- python学习笔记(十四)python实现发邮件
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart u ...
- python cookbook第三版学习笔记十四:类和对象(五)代理类以及内存回收
代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A: def spam(self,x) ...
- python 学习笔记十四 jQuery案例详解(进阶篇)
1.选择器和筛选器 案例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- python学习笔记(十 四)、web.py
使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...
- Python学习第十四篇——类初步使用及面向对象思想
class Restaurant(): def __init__(self,restaurant_name,cuisine_type): self.name = restaurant_name sel ...
- python学习笔记十四:wxPython Demo
一.简介 wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets ...
- python学习笔记(十四): unittest
Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 在说unittest之前,先说几个概念: TestC ...
- python 学习笔记(十四)有依赖关系的接口开发
接口开发中存在很多有依赖关系的接口,例如:BBS中发帖的时候就需要进行校验用户是否登录,那么此时发帖的接口就与用户登录接口有依赖关系.在发帖时就需要先获取用户的session,与当前登录用户进行校验对 ...
- Python学习笔记整理(四)Python中的字符串..
字符串是一个有序的字符集合,用于存储和表现基于文本的信息. 常见的字符串常量和表达式 T1=‘’ 空字符串 T2="diege's" 双引号 T3=""&quo ...
- python学习笔记(十六)-Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
随机推荐
- div实现水平和垂直都居中的三个超实用的方法
本文仅仅介绍作者认为的三种不错的方式, 方式一:transform: translate(-50%,-50%) 示例代码如下: .div{ position: absolute; top: 50%; ...
- 用WebStorm开发TypeScript
为什么是TypeScript 最近在做H5的游戏,最终选定的TypeScript作为开发语言.主要是看重他有强类型和Class,作为习惯使用AS3,Java等强类型编程的人来说,还是习惯这种编程写法. ...
- 全面认识Docker和基本指令
Docker逐渐成为虚拟化技术的佼佼者,Java架构师之路接下来会推出一系列的Docker相关技术文章,Docker技术也是架构师的必备技能. 什么是Docker Docker 是一个开源的应用容器引 ...
- 横向开关(switch)
横向开关(switch) 一:属性 1.Activity //横向开关 public class SwitchActivity extends Activity { private Switch sw ...
- 如何从只会 C++ 语法的水平到达完成项目编写软件的水平?
原文:https://www.zhihu.com/question/29702729 学习 C++ 有一段时间了,但只是停留在熟悉语法阶段,在看 C++primer,不过感觉这本书比较深奥,不太适合, ...
- 在 O(1) 时间删除链表结点(C 和 Python 实现)
(说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 给定单向链表的头指针和一个结点指针,定义一个函数在 O(1) ...
- Ddos 反射性防护 simple
加固NTP服务: 1.通过Iptables配置只允许信任的IP,访问本机的UDP的123端口,修改配置文件执行echo "disable monitor" >> /et ...
- C#调用C++函数
一.新建C++项目 1.在VS2012中新建->项目->模版->其他语言->Win32->Win32项目->下一步->选DLL,导出符号. 2.在XX.h项目 ...
- 如何在windowserver2012 r2服务器AD域控制器中创建一个域管理员帐号
用户创建完毕之后,需要添加一下权限才能实现域管理员账户的相关功能
- Spark shuffle调优
1:sparkconf.set("spark.shuffle.file.buffer","64K") --不建议使用,因为这么写相当于硬编码2:在conf/sp ...