一、编写类
编写类之一创建实例
1.self的作用
2.构造函数的参数
编写类之二方法
1.数据流转过程
2.为什么要用到方法
3.编写和操作方法
编写类之三子类
1.子类、父类和继承
编写类之四再论继承
其它方法的继承
编写类之一创建实例:
创建类的方法比较简单,代码如下:
class Person:
注意:类的名称一般是大写字母开头,后面记得不要丢掉冒号。
接下来一般是构造类的函数,解释一下什么是构造函数,如下:
class Person:
def __init__(self,name,lang,website):
self.name = name
self.lang = lang
self.website = website
类的基本结构写在__init__()这个函数里面,这个函数被称为构造函数。(担负着对类进行初始化的任务)
注意:init()的函数,是以双下划线开始,然后init,最后以双下划线结束的。和之前命名的函数一样,奇特之处就是以“—”双下划线开始和结束。
类其实就是一种对象类型,和之前的数值,字符串,列表等类型一样,这里的类名为 Person,这个对象类型被称之为 Person,如同一种对象类型为list一样
上面的代码写好后,init()是无法运行起来的,我们需要对其进行实例化操作,因为我们还没有对“Person”进行描述,在Python中有个专业术语叫实例化。如下:
#!/usr/bin/env python
# __*__ coding:utf-8 __*__
class Person:
def __init__(self,name,lang,website):
self.name = name
self.lang = name
self.website = website
info = Person('junhao','python','www.baidu.com')#这一步是对Person进行描述,将其实例化
print('info.name = ',info.name)
print('info.lang = ',info.lang)
print('info.website = 'info.website)
运行结果:
info.name = junhao
info.lang = python
info.website = www.baidu.com
注意: info = Person(‘junhao’,‘python’,‘www.baidu.com’)#这一句是对Person进行描述,将其实例化,也就是在内存中创建了实例,创建了一个为Person的对象类型。
1.self的作用
self 是一个很神奇的参数。
self的作用:接收实例化过程中传入的所有数据,这些数据通过构造函数后面的参数导入的,self其实就是实例,因为它对应的就具体的数据
2.构造函数的参数
在本文章前面就已经说过__init__()就是函数,只不过长得有些奇怪,函数中的操作在构造函数中都是可行的。
把构造函数的参数设置成默认值,如果没有新的数据就用这些默认值:
class Person:
def __init__(self,name,lang=‘golang’,website='www.junhao.com'):
self.name = name
self.lang = lang
self.website = website
junhao = Person('Junhao')
info = Person('junhao','Python','www.baidu.com')
*print('junhao.name = ',junhao.name)*
print('info.name = ',info.name)
*print('junhao.lang = ',junhao.lang)*
print('info.lang = ',info.lang)
*print('junhao.website = ',junhao.website)*
print('info.website = ',info.website)
运行结果:
*junhao.name = Junhao*
info.name = junhao
*junhao.lang = golang*
info.lang = Python
*junhao.website = www.junhao.com*
info.website = www.baidu.com
看官们请先回想理解一下:“类就是实例的工厂” 这句话,通过Person生成两个实例:junhao,info
此外,在看构造函数中的赋值情况,允许设置默认参数的默认值。
到目前,我们构造了一个类的基本结构,完成了类的初始化。
编写类之二方法
数据流转:
除了在类中可以写__init__()这种函数之外,还可以写其他函数,延续前面:
#!/usr/bin/env python
#coding:utf-8
class Person:
def __init__(self, name, lang="golang", website="www.google.com"):
self.name = name
self.lang = lang
self.website = website
self.email = "qiwsir@gmail.com"
def author(self):
return self.name
laoqi = Person("LaoQi")
info = Person("qiwsir",lang="python",website="qiwsir.github.io")
print "Author name from laoqi:",laoqi.author()
print "Author name from info:",info.author()
子类、父类和继承
看下面的代码,里面有两个类:junhao,qinghua; 这段代码能运行,因为他们打印了指定的内容。
class junhao:
def __init__(self):
print('aaaa')
class qinghua:
def __init__(self):
print('bbbb')
if __name__ =='__main__':
a = junhao()
b = qinghua()
上面两个类:(junhao,qinghua)没有什么所谓的继承关系,那么下面我们将代码改写一下:
class junhao:
def __init__(self):
print('aaaa')
class qinghua(junhao): #这里表示 qinghua(子类) 继承了 jinhao(父类)
def __init__(self):
print('bbbb')
if __name__ =='__main__':
a = junhao()
b = qinghua()
运行结果:
aaaa
bbbb
这段程序跟上面有些不同,class qinghua(junhao): 这表明了 qinghua 相对junhao 的关系:qinghua 是junhao 的子类,qinghua从junhao继承了 junhao的所有东西(),junhao是父类,(子父继承);以上子类没有调用父类的任何函数。
子类 继承 父类 的全部“财产”,代码如下:
class junhao:
def __init__(self):
print('aaaa')
class qinghua(junhao):
def __init__(self):
# print('bbbb')
junhao.__init__(self) #子类调用父类的构造函数
if __name__ =='__main__':
a = junhao()
b = qinghua()
运行结果:
aaaa
aaaa
这次运行有了变化,本来是qinghua = qinghua()运行qinghua 类,但是qinghua继承了 junhao,并且在初始化构造函数中 ,引入了junhao的构造函数,所以运行了junhao函数中的相应结果。
再论继承:
#!/usr/bin/env python
#coding:utf-8
class Person:
def __init__(self, name, email):
self.name = name
self.email = email
class Programmer(Person): #Programmer 继承 Person
def __init__(self, name,email,lang, system, website):
Person.__init__(self,name,email)
self.lang = lang
self.system = system
self.website = website
class Pythoner(Programmer): #Pythoner 继承 Programmer
def __init__(self,name,email):
Programmer.__init__(self,name,email,"python","Ubuntu","qiwsir.github.io")
if __name__=="__main__":
writer = Pythoner("qiwsir","qiwsir@gmail.com")
print "name=",writer.name
print "lang=",writer.lang
print "email=",writer.email
print "system=",writer.system
print "website=",writer.website
运行结果:
name= qiwsir
lang= python
email= qiwsir@gmail.com
system= Ubuntu
website= qiwsir.github.io
程序中的继承关系:Pythoner <-- Programmer <-- Person。继承能够减少代
码重复,是的代码更简练。另外,在继承的时候,也可以在函数中对参数进行默认赋值。