网络安全入门学习第十四课——python面向对象


一、概念

Python面向对象分为,对象两种,并且分为属性和方法
类是抽象的,对象是具体的,有类才有对象

举例:

学生类
属性(静态):姓名、年龄、性别、班级
方法(动态):学习、玩耍

学生对象:
属性(静态):张志涵、12岁、女、6年级
属性(方法):去图书馆学习、周末公园玩耍

二、定义

#定义学生类

class Students:	

	#定义属性
	name = ""
	age = 0
	gander = ""
	grand = 0
	
	#定义方法
	def learn(self):
		print("学习")
	def play(self):
		print("玩耍")
	#函数在类里面就叫做方法
	
#创建学生对象
stu1 = Students()
stu1.name = "张志涵"
stu1.age = 12
stu1.gander = "女"
stu1.grand = "6年级"
#stu1就是一个对象

#调用方法
stu1.learn()

输出:学习

三、构造函数 __init__(这里下划线是各两个)

方便一行创建对象

class Students:
	#初始化属性
	def __init__(self,name,age,gander,grand):
		self.name = name 
		self.age = age 
		self.gander = gander 
		self.grand = grand
	#定义普通(函数)方法
	def learn(self):
		print("我经常去图书馆学习")
	def play(self,where):
		print("我周末喜欢去公园玩耍"+where)
	
#创建对象
stu1 = Students("张志涵",12,"女",6)

print(stu1.name)
stu1.learn()
stu1.play("上海")
输出结果:
张志涵
我经常去图书馆学习
我周末喜欢去公园玩耍上海

四、属性私有化封装(用于简单加密,让属性无法直接调用)

#下面举例一个银行卡类(用户名,密码,余额):
class Cards:
	def __init__(self,account,password,balance):
		self.account = account
		self.password = password
		self.__balance = balance #余额被私有化
	def deposit(self):
		print("进行存款")
	def getBlance(self,account,password):
		if self.account = account and self.password = password:
			return self.__balance
			
c = Cards("abc123","8888","5000")

*************下面是几种调用例子*************

a = c.balance
print(a) 
#a这里会报错,因为无法直接调用

*************

b = c.getBalance("abc123","8888")
print(b) 
#b这里就可以直接输出5000

*************

d = c.getBlance("abc123","0000")
print(d) 
#d这里就无法查询,输出None

*************

e = c._Cards__balance
print(e) 
#e这里就可以直接调用输出5000


五、继承(用于减少代码的重用,减少代码的冗余)

#创建父类
class Person:
	def __init__(self,name,age,gender):
		self.name = name
		self.age = age
		self.gender = gender
	def personInfo(self):
		print("姓名"+self.name+"年龄"+str(self.age)+"性别"+self.gender)
#创建Farmers子类
class Farmers(Person):
	def __init__(self,job,place):
		self.job = job
		self.place = place
	def personInfo(self):
		print("我是农民,我的工作是:"+self.job+"\n我的工作地点是:"+self.place)

#创建Scientists子类	
class Scientists(Person)
	def inventionM(self):
		print("袁隆平发明了杂交水稻")

#创建Teacher子类
class Teacher(Person):
	def __init__(self,name,age,gender,tall):
		super().__init__(name,age,gender)
		self.tall = tall
	def personInfo(self):
		print(self.name,"老师今年",self.age,"岁",sep="")
		print(self.name, "老师是", self.gender, "的,身高:", self.tall, sep="")
#开始调用

f = Farmers("种田","东北")
f.personInfo()
输出结果:
我是农民,我的工作是:种田
我的工作地点是:东北

s = Scientists("袁隆平",90,"男")
s.personInfo()
输出结果:
姓名袁隆平年龄90性别男

t = Teacher("刘小东",40,"男",175)
t.personInfo()
输出结果:
刘小东老师今年40岁 
刘小东老师是男的,身高:175

  • 子类继承父类的属性,可以使用 super().__init__ 的写法来继承,这样可以省略一部分代码。
  • 假如要使用 super() 继承父类的属性,必须要继承全部,不能只继承一部分,只继承一部分会报错。

六、抽象类

  1. 只能被继承,不能实例化(创建对象)
  2. 抽象类中有抽象方法,子类继承抽象类父类,必须要实现父类的抽象方法
  3. 定义抽象类导入abc模块:
import abc

格式如下:

class 类名(metaclass abc.ABCMeta):
#定义方法,无方法体,需要加上@abc.abstractmethod
	def 方法名(self):
		pass

举例:
import abc
class animals(metaclass=abc.ABCMeta):
	#普通方法
	def __init__(self,name,color):
		self.name = name
		self.color = color
		
	#抽象方法
	@abc.abstractmethod
	def eat(self):
		pass

下面是错误示范

#创建子类
class dogs(animals):
	pass

#创建对象
d = dogs("大黄","black")

#这里会报错,因为子类必须重写 eat() 这个抽象方法才能创建对象

下面是正确示范

#创建子类
class dogs(animals):
	def eat(self):
		print("啃骨头")

#创建对象
d = dogs("大黄","black")
d.eat()

#不报错,这里就能成功输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值