Python学习(十四)——面向对象
来源:互联网 发布:达尔朗 知乎 编辑:程序博客网 时间:2024/06/09 22:42
面向对象
类的基本使用:
1 编写一个空类
# 空类class MyClass(object): 'abs' pass
2 编写一个简单类
定义一个猫的类,默认为所有猫的叫声都是'Meow':
# 简单类class Cat(object): def cry(self): print 'Meow! Meow!'if __name__ == '__main__': #实例化 cat = Cat() cat.cry()
输出:
Meow! Meow!
3 为简单类添加一个属性
在猫类下添加一个catName方法,绑定一个name属性,在实例化的时候记录猫的名字:
class Cat(object): "define a class" def catName(self, name): self.name = name def cry(self): print 'Meow! Meow! I am %s.'%self.nameif __name__ == '__main__': # 程序入口 cat = Cat() cat.catName('Min') # 设置实例属性 cat.cry() # 设置实例行为
输出:
Meow! Meow! I am Min.
4 通过定义一个init方法,把一些必须绑定的属性强制填写进去;
这里认为所有的猫都该有个自己的名字,所以将name绑定到init方法上:
# __init__()举例class Cat(object): "define a class" def __init__(self, name): self.name = name def cry(self): print 'Meow! Meow! I am %s.'%self.nameif __name__ == '__main__': # 程序入口 cat = Cat('Min') cat.cry() # 设置实例行为
5 添加类属性
类属性(class attributes):与实例无关,修改类属性需要使用类名.
可以由类中的方法来更新,也可以在主程序中更新.
class Cat(object): "define a class" counter = 0 def __init__(self, name): self.name = name Cat.counter += 1 # 注意:修改类属性需要使用类名. def cry(self): print 'Meow! Meow! I am %s.'%self.name print Cat.counterif __name__ == '__main__': # 程序入口 for i in range(5): cat = Cat('cat'+str(i+1)) cat.cry() # 设置实例行为
输出:
Meow! Meow! I am cat1.1Meow! Meow! I am cat2.2Meow! Meow! I am cat3.3Meow! Meow! I am cat4.4Meow! Meow! I am cat5.5
6 类的继承
Python中类的继承可以单继承也可以多继承.
class Cat(object): "define a class" counter = 0 def __init__(self, name): self.name = name Cat.counter += 1 # 注意:修改类属性需要使用类名. def cry(self): print 'Meow! Meow! I am %s.'%self.name print Cat.counter# 子类PersionCat继承了父类Catclass PersionCat(Cat): def cry(self): # 子类重写了父类中的cry()方法 print 'I am %s. and I am a Persion Cat' % self.nameif __name__ == '__main__': # 程序入口 for i in range(5): cat = PersionCat('cat'+str(i+1)) cat.cry() # 设置实例行为
输出:
I am cat1. and I am a Persion CatI am cat2. and I am a Persion CatI am cat3. and I am a Persion CatI am cat4. and I am a Persion CatI am cat5. and I am a Persion Cat
常规方法 类方法 静态方法
即常规方式, @classmethod修饰方式, @staticmethod修饰方式
常规方法绑定对象的实例;
类方法方法绑定对象
静态方法没有参数绑定
class A(object): def f(self, x): print("f(%s,%s)" % (self, x)) print('self:', self) @classmethod def classmethod_f(cls, x): print("classmethod_f(%s,%s)" % (cls, x)) print('cls:', cls) @staticmethod def staticmethod_f(x): print("staticmethod_f(%s)" % x)cat = A()print(cat.f(456))print(cat.classmethod_f(895656))print(cat.staticmethod_f(5))
输出:
f(<__main__.A object at 0x7f912d3ab6d0>,456)('self:', <__main__.A object at 0x7f912d3ab6d0>)Noneclassmethod_f(<class '__main__.A'>,895656)('cls:', <class '__main__.A'>)Nonestaticmethod_f(5)None
阅读全文
0 0
- Python学习(十四)——面向对象
- javascript学习(十四)— 面向对象编程
- python学习——面向对象编程
- python学习——面向对象编程
- Python学习笔记(六)——面向对象编程
- python学习(12)——面向对象编程
- python学习(13)——面向对象高级编程
- Python学习笔记(十)——面向对象
- python学习(7)——面向对象编程
- Python学习笔记(三)——模块|面向对象
- python学习(二)——面向对象
- php【基础学习十四】面向对象
- 学习python(十四)
- python学习:面向对象
- Python面向对象学习
- Python学习-面向对象
- Java面向对象设计模式(十四)——模板方法模式(Template Method)
- python学习笔记(十四)——栈和队列
- 丢失libiconv-2.dll解决办法以及无法定位输入点libiconv-2.dll到动态链接库
- git 到gitub中出现的问题
- CCS7.2软/硬件断点设置,精确计算代码运行时间及定时器定时时间验证(适用于C28x芯片)
- mysql 加载本地数据文件
- QEMU 运行ARM Linux Kernel
- Python学习(十四)——面向对象
- Python之time模块的时间戳、时间字符串格式化与转换(13位时间戳)
- C/C++学习记录
- 【OpenCV函数】轮廓提取;轮廓绘制;轮廓面积;外接矩形
- Reader和Writer
- Spring JDBC-混合框架的事务管理
- 安卓ViewPager系列自定义效果,助你打造炫酷轮播图——索引。
- 神经网络
- java什么时候进行垃圾回收,垃圾回收的执行流程