本文将讲述:
面向对象编程:类self、继承 super、导入类
1.关于类
1.1创建类
类是蓝图,依照类创建对象(实例化):
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
def sit(self):
print(self.name+' now is sitting')
mycat=Cat('Lily',23)
print('Its name is '+mycat.name)
mycat.sit()
1.类默认首字母大写,类括号为空的
2.__ init__ 创建新类的默认方法,自动传入实参self:指向实例本身的引用,为了访问类中的属性和方法
3.self.name=name 获取存储在形参name中的值,存储到变量name中。可通过实例访问的变量就是属性
结果:
Its name is Lily
Lily now is sitting
python2.7
class Dog(object):
1.2给属性指定默认值
例子:self.number=123
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
self.number=123
def sit(self):
print(self.name+' now is sitting')
mycat=Cat('Lily',23)
print(str(mycat.number)+' Its name is '+mycat.name)
结果
123 Its name is Lily
1.3修改属性值
1.3.1直接修改
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
self.number=123
def sit(self):
print(self.name+' now is sitting')
mycat=Cat('Lily',23)
mycat.name='Emma'
print(mycat.name)
结果:Emma
1.3.2 通过方法修改
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
self.number=123
def sit(self):
print(self.name+' now is sitting')
def changename(self,name):
self.name=name
mycat=Cat('Lily',23)
mycat.changename('Julia')
print(mycat.name)
结果:Julia
1.3.3通过方法对属性的值进行递增
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
self.number=123
def agechange(self,age,year):
self.age+=year
mycat=Cat('Lily',23)
mycat.agechange(23,3)
print(mycat.age)
结果:26
2.继承
2.1一次继承
继承:编写的类是一个现成类的特殊版本。子类继承父类,子类自动获得父类的所有属性和方法,也可定义自己的属性和方法
注意事项:
1.创建子类时,父类必须包含在当前文件中,且位于子类的前面
2.定义子类时,必须在括号内中指定父类的名称
3.子类方法__init__接受创建父类实例所需的信息
例子
4.super()关联子类和父类,使子类实例包含父类的所有属性。父类又称超类superclass
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
self.number=123
def agechange(self,age,year):
self.age+=year
class DragonliCat(Cat):
def __init__(self,name,age):
super().__init__(name,age)
mycat=DragonliCat('Lily',3)
print(mycat.age)
结果:3
2.2给子类定义属性和方法
class Cat():
--snip--#同上
class DragonliCat(Cat):
def __init__(self,name,age):
super().__init__(name,age)
self.color='grey'#子类特有的新属性
def print_color(self):
print('it is '+self.color)
mycat=DragonliCat('Lily',3)
DragonliCat.print_color(mycat)
运行结果
it is grey
2.3重写 父类的方法
定义一个方法与要重写的父类方法同名
class Cat():
--snip--
class DragonliCat(Cat):
def __init__(self,name,age):
super().__init__(name,age)
self.color='grey'
def print_color(self):
print('it is '+self.color)
def agechange(age):
age+=age
print(age)
mycat=DragonliCat('Lily',4)
DragonliCat.agechange(3)
结果:6
2.4 将实例用作属性
创建猫咪一个实例:体型大小size作为狸花猫DragnliCat的属性
mycat.size.print_size()
class Cat():
#模拟小猫咪
def __init__(self,name,age):
self.name=name
self.age=age
self.number=123
def agechange(self,age,year):
self.age+=year
class Size():
def __init__(self,size=1):
self.size=size
def print_size(self):
print(self.size)
class DragonliCat(Cat):
def __init__(self,name,age):
super().__init__(name,age)
self.color='grey'
self.size=Size()
mycat=DragonliCat('Lily',4)
mycat.size.print_size()
结果:1
3.导入类
3.1导入单个类
from 模块名(文件名) import 类名
3.2导入多个类
from 模块名(文件名) import 类名1,类名2
3.3 导入整个模块
import 模块名
3.4 导入模块中的所有类
from 模块名 import *
不建议:1.没有明确指明使用了哪些类。
2.如果导入与程序文件同名的类会出错
3.5开发建议
先在文件中尝试完成所有工作,然后将类移动到独立模块。也可以一开始就在独立模块中放类。
命名注意逻辑而不是关注英语语法。
3.6 python标准库
Python标准库是一组模块,安装的Python都包含它,直接import使用