Python之类
来源:互联网 发布:元启发式算法 编辑:程序博客网 时间:2024/06/15 08:29
面相对象编程是最有效的的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情境,其逼真程度达到了令你惊讶的地步。
创建和实用类
使用类几乎可以模拟任何东西。下面来编写一个表示小狗的简单类Dog——它表示的不是特定的小狗,而是任何小狗。对于大多数宠物狗,我们都知道些什么呢?名字、年龄、会蹲下以及打滚。
创建Dog类
dog.py
class Dog(): #类的首写字母要大写 #self形参必不可少,它是一个指向实例本身的引用 def __init__(self,name,age): #开头和末尾有两个下划线 self.name = name #以self为前缀的变量都可供类中的所有方法使用,我们可以通过类的任何实例来访问这些变量 self.age = age def sit(self): #模拟小狗蹲下 print(self.name.title()+" is now sitting.") def roll_over(self): #模拟小狗打盹 print(self.name.title()+" rolled over!")
根据类创建实例
下面来创建一个表示特定小狗的实例;
class Dog(): ---snip----my_dog = Dog('Jack',8)my_dog.sit()my_dog.roll_over()print("小狗的年龄:"+str(my_dog.age))
输出结果:
修改属性的值
直接修改属性的值
要修改属性的值,最简单的方式是通过实例直接修改它。
例如:
class Dog(): ---snip----my_dog = Dog('Jack',8)my_dog.sit()my_dog.roll_over()print("小狗的年龄:"+str(my_dog.age))my_dog.age = 9print("小狗的年龄:"+str(my_dog.age))
输出结果:
通过方法修改属性的值
如果有替你更新属性的方法,将大有裨益。这样你无需直接访问属性,而可将值传递给一个方法,由它在内部进行更新。
例如:
class Dog(): ---snip---- def update_age(self,modify_age): self.age = modify_agemy_dog = Dog('Jack',8)my_dog.sit()my_dog.roll_over()print("小狗的年龄:"+str(my_dog.age))my_dog.update_age(9)print("小狗的年龄:"+str(my_dog.age))
输出结果:
继承
编写类时,并非总是要从将空白开始。如果你要编写的类是另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,它将自动获得另一个类的所有属性和方法,同时还可以定义自己的属性和方法。
子类的方法_init_()
创建子类的实例时,Python首先需要完成的任务是给父类的所有属性赋值。为此,子类的方法_init_()需要父类施以援手。
例如,基于以上的案例,模拟黑色的小狗,它具备小狗所有的功能:
class Dog(): ---snip----class BlackDog(Dog): #黑色小狗的独特之处 def __init__(self,name,age): super().__init__(name,age) self.color = 'black'my_dog = BlackDog('Jack',8)my_dog.sit()my_dog.roll_over()print("小狗的年龄:"+str(my_dog.age))my_dog.update_age(9)print("小狗的年龄:"+str(my_dog.age))print("小狗的颜色:"+my_dog.color)
输出结果:
重写父类的方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名。这样,Python将不会考虑这个父类方法。而只关注你在子类中定义的相应的方法
假如,黑色的狗不会蹲下
class Dog(): ---snip----class BlackDog(Dog): #黑色小狗的独特之处 def __init__(self,name,age): super().__init__(name,age) self.color = 'black' def sit(self): print("黑色的狗不会蹲下")my_dog = BlackDog('Jack',8)my_dog.sit()
输出结果:
导入类
随着你不断地给类添加功能,文件可能变得很长,即便你妥善地使用了继承亦如此。为遵循Python的总体理念,应该让文件尽可能整洁。为在这方面提供帮助,Python允许你将类存储在模块中,然后再主程序中导入所需要的模块。
导入单个类
首先定义一个Dog类,该类包含dog属性和方法(行为)。
class Dog(): #类的首写字母要大写 #self形参必不可少,它是一个指向实例本身的引用 def __init__(self,name,age): #开头和末尾有两个下划线 self.name = name #以self为前缀的变量都可供类中的所有方法使用,我们可以通过类的任何实例来访问这些变量 self.age = age def sit(self): #模拟小狗蹲下 print(self.name.title()+" is now sitting.") def roll_over(self): #模拟小狗打盹 print(self.name.title()+" rolled over!") def update_age(self,modify_age): self.age = modify_age
下面创建一个my_dog.py,使其导入Dog类并创建实例
from dog import Dogmy_dog = Dog('Jack',8)my_dog.sit()my_dog.roll_over()print("小狗的年龄:"+str(my_dog.age))my_dog.update_age(9)print("小狗的年龄:"+str(my_dog.age))
输出结果:
注意:
可以从一个模块导入多个类
from dog import Dog,BlackDog
也可以导入整个模块
from dog
Python标准库
Python标准库是一组模块,安装Python都包含它。你现在对类的工作原理已有大致了解,可以使用其他程序员编写的模块了。
字典让你能够将信息关联起来,但他们不记录你添加键-值对的顺序。要创建字典并记录其中的键-值对的添加顺序,可使用模块collections中的OrderdDict类。
例如:
from collections import OrderedDictfavorite_languges = OrderedDict()favorite_languges['苏林东'] = 'Python'favorite_languges['程菲'] = 'C'favorite_languges['杨明'] = 'C++'for name,value in favorite_languges.items():print(name.title()+"最喜欢的编程语言:"+value.title()+'.')
输出结果:
- python之类
- Python之类
- Python之类
- Python小贴士之类
- Python 学习之类(Class)
- Python学习之类属性
- Python学习之类
- python之类定义
- python之类--socket
- python之类之select
- python之类-django进阶
- Python抽象之类
- python学习总结之类对象
- Python之类(Class)的学习
- python之类方法的重载
- Python浅析之类的写法
- python基础知识之类和文件
- Python初学之类的方法
- 深入理解SVM
- HTML文档结构、注释
- java判断字符串是否为空的方法总结
- java 出现unreachable statement异常
- Windows系统,VS和GCC下各种数据类型大小的比较
- Python之类
- linux学习笔记
- 纹理
- Java中判断String不为空的问题
- 灯光篇之一【环境光AmbientLight】
- 局部变量/成员变量
- Eclipse下NDK配置的问题
- git学习--GitHub上如何进行PR(Pull Request)操作
- Calendar.add(Calendar.DATE,5)