python 基础:面向对象(类的使用)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_27295149/article/details/102710931

面向对象三特性

  • 封装
  • 继承
  • 多态

封装

保护私隐,明确区分内外。隐藏数据,并对外提供操作该数据的接口,完成对数据属性操作的严格控制。

class Student:
	def __init__(self, name, birthdate):
		self.name = name
		self.birthdate = birthdate

	# 属性 s.age 装饰的对象函数是一个getter函数
	@property 
	def age(self):
		return datetime.date.today().year - self.birthdate.year
	
	# 只定义getter方法,不定义setter方法就是一个只读属性
	@age.setter
	def age(self, value):
		raise AttributeError('禁止赋值年龄')
	
	# @deleter定义可读可写可删除属性
	@age.deleter
	def age(self):
		raise AttributeError('年龄不能删除')

if __name__ == '__main__':
	s = Student('tom', datetime.date(1992,3,1))
	print(s.birthdate)
	print(s.age)

继承

Employee是基类,Programer和HR是继承了基类的类

import datetime
# 继承
class Employee:
	def __init__(self, department, name, birthdate, salary):
		self.department = department
		self.name = name
		self.birthdate = birthdate
		self.salary = salary

	def __repr__(self):
		return '<员工: {}>'.format(self.name)

	def give_raise(self, percent, bonus=0.1):
		self.salary = self.salary*(1+percent+bonus)

	def working(self):
		print('员工: {} 在工作'.format(self.name))

	@property
	def age(self):
		return datetime.date.today().year -  self.birthdate.year

class Programer(Employee):
	def __init__(self, department, name, birthdate, salary, specialty, project):
		super().__init__(department, name, birthdate, salary)
		self.specialty = specialty
		self.project = project

	def working(self):
		print('程序员{}在工作, 开发{}'.format(self.name, self.project))

class HR(Employee):
	def __init__(self,department, name, birthdate, salary,qualification_level=1):
		Employee.__init__(self, department, name, birthdate, salary)
		self.qualification_level = qualification_level

	def working(self):
		print('人事: {} 正在面试'.format(self.name))
if __name__ == '__main__':
	p = Programer('技术部','peter',datetime.date(1990,3,3,),8000,'Flask', 'crm')
	print(p)
	print(p.age)
	hr = HR('人事部', 'marry', datetime.date(1990,2,3,), 9000, 1)

多态

属于同一类型的不同实例,对同一信息不同的响应。
这里HR,Programer对Department有不同响应。

# 多态

import datetime

class Department:
	def __init__(self, department, phone, manger):
		self.department = department
		self.phone = phone
		self.manger = manger
	
	def __repr__(self):
		return '<部门: {}>'.format(self.department)

# 继承
class Employee:
	def __init__(self, department, name, birthdate, salary):
		self.department = department
		self.name = name
		self.birthdate = birthdate
		self.salary = salary

	def __repr__(self):
		return '<员工: {}>'.format(self.name)

	def give_raise(self, percent, bonus=0.1):
		self.salary = self.salary*(1+percent+bonus)

	def working(self):
		print('员工: {} 在工作'.format(self.name))

	@property
	def age(self):
		return datetime.date.today().year -  self.birthdate.year

class Programer(Employee):
	def __init__(self, department, name, birthdate, salary, specialty, project):
		super().__init__(department, name, birthdate, salary)
		self.specialty = specialty
		self.project = project

	def working(self):
		print('程序员{}在工作, 开发{}'.format(self.name, self.project))

class HR(Employee):
	def __init__(self,department, name, birthdate, salary,qualification_level=1):
		Employee.__init__(self, department, name, birthdate, salary)
		self.qualification_level = qualification_level

	def working(self):
		print('人事: {} 正在面试'.format(self.name))
if __name__ == '__main__':
	dep = Department('技术部, ''8080133','张大三')
	p = Programer(Department,'peter',datetime.date(1990,3,3,),8000,'Flask', 'crm')
	hr = HR('人事部', 'marry', datetime.date(1990,2,3,), 9000, 1)

猜你喜欢

转载自blog.csdn.net/qq_27295149/article/details/102710931