`
runfeel
  • 浏览: 905227 次
文章分类
社区版块
存档分类
最新评论

Python2.7 学习笔记 (三)—— 类,继承,重载

 
阅读更多
16:56 2012-3-9
声明:以下代码都是在Python2.7+Winxp中执行通过

[面向对象]
1.类的定义
#-*-coding:utf-8-*-
class student:
name = '' #定义类的公有属性,可直接访问
age =0

class human :
sex =''
height=0

2.类的继承
class student(human): #只能继承父类的共有属性和共有方法,私有的属性和方法不能继承

3.类的使用
#-*-coding:utf-8-*-
tom = student() #实例化student类
tom.name='tome'
print tom.name
print tom.age

4.类的变量和方法
__开始的变量,是私有变量,只有在类内部可以访问,要通过self.__name 访问,相当于private
可以通过函数来取得和修改私有变量
其他变量,都属于公有变量,相当于public

4.1类的私有变量
#-*-coding:utf-8-*-
class human:
name ='human'
age =18
__sex='male' # 私有变量

def getSex(self):
return self.__sex

def setSex(self,sex): #self必须是第一个参数
self.__sex=sex

class student(human):
grade =0

print human.name
print student.grade
print student.age #继承自父类human
#print human.__sex #这里会报错,私有变量不能直接访问
h= human()
print h.getSex()
h.setSex('female') #设置sex 为female
print h.getSex()

4.2类的私有方法
#-*-coding:utf-8-*-
class human:
name ='human'
age =18
__sex='male' # 私有变量

def __privateMethod(self): #类的私有方法
print "I am a class private method"

def callPrivateMethod(self): #调用类私有方法,只有类内部可以调用
self.__privateMethod() #调用的时候,需要加self前缀

class student(human):
grade =0

h= human()
h.callPrivateMethod()

4.3.类的专有方法 Special Methods
__init__ 构造函数,生成对象时被调用
__del__ 析构函数,释放对象时被调用
__add__ 加晕死
__mul__ 乘运算
__cmp__ 比较运算
__repr__ 打印,转换
__setitem__ 按照索引赋值
__getitem__ 按照索引取值
__len__ 获得长度
__call__ 函数调用

#-*-coding:utf-8-*-
class human:
__name=''

__age=0


def __init__(self,name,age): #构造函数
self.__name=name
self.__age=age

def show(self): # def 和class 之间要有缩进
print "name is:"+self.__name
print "age is:"+ str(self.__age) #数字记得要转换成字符串
tom = human("tom",18);
tom.show();

5.类的多重继承
class student (human,father,superman):
基础顺序从左往右,子类的变量和方法会覆盖父类的同名变量和方法

#-*-coding:utf-8-*-
class human:
name ='human'
nickname='h'
def show(self): #def 和class 之间要有缩进
print "name is:"+self.name
print "nickname:"+self.nickname

class teacher:
name ='teacher'
nickname='t'
def show(self): #def 和class 之间要有缩进
print "name is:"+self.name
print "nickname:"+self.nickname

class boy(human,teacher): #继承顺序从左往右:human,teacher
nickname="boy"; #父类里也有nickname,但是这个值会被子类覆盖掉

class girl(teacher,human): #继承顺序从左往右:teacher,human
nickname="girl";

b = boy();
b.show();#输出 name is human ,nickname is boy

g = girl();
g.show();#输出 name is teacher,nickname is girl

6.重载
子类中,使用和父类同样的方法名,就可以覆盖父类的方法
#-*-coding:utf-8-*-
#重载
class human:
def show(self): #def 和class 之间要有缩进
print "name is father"

class boy(human):
def show(self): #def 和class 之间要有缩进
print "name is boy"

b = boy();
b.show();#输出 name is boy

7.运算符重载
python中的运算符,其实也是对应相应的方法,所以,运算符重载,就是相应的方法重载
了解这个之后,运算符重载就和普通重载没什么区别
+ __add__
- __sub__
* __mul__
/ __div__
% __mod__
** __pow__

#运算符重载
class mylist:
__params =[]
def __init__(self,*args): #重载__init__方法, *args为可变参数
self.__params=[] #初始化
for arg in args:
self.__params.append(arg) #把输入参数都存到params里


def __add__(self,n): # 重载__add__方法; n 表示被加的那个数
for i in range(0,len(self.__params)):
self.__params[i] +=n; #params里的数都加1
def show(self):
print self.__params

list = mylist(1,2,3,4,5)
list+ 1 #1就相当于__add__(self,n) 里的n
list.show() #输出[2.3,4,5,6]

18:38 2012-3-12
END

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics