Python——关于类的认识

一、编写类
编写类之一创建实例
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。继承能够减少代
码重复,是的代码更简练。另外,在继承的时候,也可以在函数中对参数进行默认赋值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值