python笔记(六)
来源:互联网 发布:淘宝判断虚假交易 编辑:程序博客网 时间:2024/05/02 04:57
对象的优越性体现在:封装 继承 包含
class <类名>(父类名):
pass class语句末尾要有一个‘:’ 没有父类的时候可以不写括号
最简单的类:
class Myclass:
pass 也会自动继承内建的类Object
class MyClass:
"MyClass help."
myclass = MyClass()
print('输出类说明:')
print(myclass.__doc__)
print('显示类帮助信息:')
help(myclass)
类的方法:
方法的第一个参数必须是self,且不可省略 方法调用时不提供self参数
方法的调用需要实例化类,并以实例名.方法名(参数列表)形式调用
整体进行一个单位的缩进,表示其属于类体中的内容
类中方法调用方法:self.方法名(参数列表)
类的属性有两类:
实例属性:属于某一个实例具体化 与别的实例之间数据互不干扰
类属性:只要有一个实例修改了类属性,在别的实例中也会随之改变
class Demo_Property:
class_name = "Demo_Property"
def __init__(self,x=0):
self.x = x
def class_info(self):
print('类变量值:',Demo_Property.class_name)
print('实例变量值:',self.x)
def chng(self,x):
self.x = x
def chng_cn(self,name):
Demo_Property.class_name = name
dpa = Demo_Property()
dpb = Demo_Property()
print('初始化两个实例')
dpa.class_info()
dpb.class_info()
print('修改实例变量')
print('修改dpa实例变量')
dpa.chng(3)
dpa.class_info()
dpb.class_info()
print('修改dpb实例变量')
dpb.chng(10)
dpa.class_info()
dpb.class_info()
print('修改类变量')
print('修改dpa类变量')
dpa.chng_cn('dpa')
dpa.class_info()
dpb.class_info()
print('修改dpb实例变量')
dpb.chng_cn('dpb')
dpa.class_info()
dpb.class_info()
python不含有私有属性和方法,通常用__双下划线的名称来标识,以养成良好的编程习惯
@staticmethod:静态方法:无法访问类属性,实例属性,相当于一个独立的方法,跟类其实没什么关系,其实质就是放在类作用域里面的一个函数
@classmethod:类方法:可以访问类属性,无法访问实例属性。但由于实例对象可以调用类属性,所以两者容易混淆。
类的继承:可以连构造 函数一起继承,可以通过重载函数来实现功能的变换,添加新的函数来完成新的功能
多重继承:
class PrntA:
namea = 'PrntA'
def set_value(self,a):
self.a = a
def set_namea(self,namea):
PrntA.namea = namea
def info(self):
print('PrntA:%s,%s' % (PrntA.namea,self.a))
class PrntB:
nameb = 'PrntB'
def set_nameb(self,nameb):
PrntB.nameb = nameb
def info(self):
print('PrntB:%s' % (PrntB.nameb,))
class Sub(PrntA,PrntB):
pass
class Sub2(PrntB,PrntA):
pass
class Sub3(PrntA,PrntB):
def info(self):
PrntA.info(self)
PrntB.info(self)
print('使用第一个子类:')
sub = Sub()
sub.set_value('aaaa')
sub.info()
sub.set_nameb('BBBB')
sub.info()
print('使用第二个子类:')
sub2= Sub2()
sub2.set_value('aaaa')
sub2.info()
sub2.set_nameb('BBBB')
sub2.info()
print('使用第三个子类:')
sub3= Sub3()
sub3.set_value('aaaa')
sub3.info()
sub3.set_nameb('BBBB')
sub3.info()
当父类不止一个时,考虑广度优先的继承,调整继承顺序:
class Ant():
def __init__(self,x=0,y=0,color='black'):
self.x=x
self.y=y
self.color=color
def crawl(self,x,y):
self.x=x
self.y=y
print('爬行...')
self.info()
def info(self):
print('当前位置:(%d,%d)'%(self.x,self.y))
def attack(self):
print('用嘴咬!')
class FlyAnt(Ant):
def attack(self):
print('用尾针!')
def fly(self,x,y):
print('飞行...')
self.x=x
self.y=y
self.info()
class FinalAnt(FlyAnt,Ant): wrong:class FinalAnt(Ant,FlyAnt)
def attack(self):
print('用身体撞!')
def jump(self,x,y):
print('跳跃...')
self.x=x
self.y=y
self.info()
f1 = FinalAnt(x=1,y=1,color='blue')
f1.crawl(3,4)
f1.fly(1,2)
f1.attack()
f1.jump(6,6)
- python笔记(六)
- python笔记(六)
- Python学习笔记:六
- python学习笔记(六)
- python 学习笔记(六)
- Python学习笔记(六)
- Python 程序设计语言 笔记(六)
- Python学习笔记(六)
- 《Python编程》笔记(六)
- python学习笔记(六)
- python基础教程学习笔记六
- OpenCV python学习笔记(六)
- python-cookbook学习笔记六
- Python-基础学习笔记(六)
- Python学习笔记(六)
- Python学习笔记(六)
- python初学笔记(六)---实例学python
- Python学习笔记(六):Python模块
- Mybatis使用一些问题
- [angular]指令之1scope
- Java代码配置DispatcherServlet
- 1002
- 笔记
- python笔记(六)
- Java 8新特性—字符串去重
- C# WPF 界面根据分辨率的大小自适应
- union查询
- LintCode547:两组数的交
- jQuery初级--jQuery中的on()方法
- ubuntu 程序自启动设置
- K60笔记2——内存空间分布
- Python Flask Restful API 基础篇