Python之类
2017-03-15 12:46
134 查看
面相对象编程是最有效的的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。编写类时,你定义一大类对象都有的通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。使用面向对象编程可模拟现实情境,其逼真程度达到了令你惊讶的地步。
创建Dog类
dog.py
输出结果:
例如:
输出结果:
例如:
输出结果:
例如,基于以上的案例,模拟黑色的小狗,它具备小狗所有的功能:
输出结果:
假如,黑色的狗不会蹲下
输出结果:
下面创建一个my_dog.py,使其导入Dog类并创建实例
输出结果:
注意:
可以从一个模块导入多个类
也可以导入整个模块
字典让你能够将信息关联起来,但他们不记录你添加键-值对的顺序。要创建字典并记录其中的键-值对的添加顺序,可使用模块collections中的OrderdDict类。
例如:
输出结果:
创建和实用类
使用类几乎可以模拟任何东西。下面来编写一个表示小狗的简单类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 = 9
print("小狗的年龄:"+str(my_dog.age))
输出结果:
通过方法修改属性的值
如果有替你更新属性的方法,将大有裨益。这样你无需直接访问属性,而可将值传递给一个方法,由它在内部进行更新。例如:
class Dog(): ---snip---- def update_age(self,modify_age): self.age = modify_age my_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 Dog my_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 OrderedDict favorite_languges = OrderedDict() favorite_languges['苏林东'] = 'Python' favorite_languges['程菲'] = 'C' favorite_languges['杨明'] = 'C++' for name,value in favorite_languges.items(): print(name.title()+"最喜欢的编程语言:"+value.title()+'.')
输出结果:
相关文章推荐
- python之类的构造和析构函数
- 咋没vb,delphi,python之类的老师嗫
- python基础教程之类class定义使用方法
- OpenCV Python API 和 Python 之类的基本知识
- Python2.6-原理之类和oop(下)
- Python2.6-原理之类和oop(上)
- Python 学习之类(Class)
- Python学习之类属性
- Python学习之类
- c++ python交互之boost.python 简集之类(class , struct)
- python之类属性和实例对象属性
- Python小贴士之类
- python基础教程之类class定义使用方法
- python之类的构造和析构函数
- c++ python交互之boost.python 简集之类(class , struct)
- c++ python交互之boost.python 简集之类成员变量设置
- python学习总结之类对象
- python学习之类的继承
- python之类方法的重载
- python之类