学习Python 十一 (封装,继承,多态)

13.2 面向对象的三大特征

13.2.1 封装

面向对象的封装:将属性和方法封装到一个类多个类,需要使用的时候,调用这些属性和方法

class User(object):
	def __init__(self, name, age, gender, tel):
		self.__name = name
		self.__age = age
		self.__gender = gender
		self.__tel = tel
		
	def __str__(self):
		return "name=" + self.__name
	#如何让外部访问到私有的属性 getter setter
	# 提供公开的get方法访问
	def get_name(self):
		return self.__name
		
	# 提供公共的set方法修改
	def set_name(self, username):
		self.__name = username
		
	def get_age(self):
		return self.__age
		
	def set_age(self, age):
		self.__age = age
		
if __name__ == '__main__':
	u = User("张三", 18, "男", "110")
	# print(u)
	print(u.get_name())
	# print(u.age)
	u.name = "lisi"
	print(u.name)

封装的第二种方法:property()

class User(object):
	def __init__(self, name, age, gender, tel):
		self.__name = name
		self.__age = age
		self.__gender = gender
		self.__tel = tel
		
	def __str__(self):
		return "name=" + self.__name
		
	#如何让外部访问到私有的属性 getter setter
	# 提供公开的get方法访问
	def get_name(self):
		return self.__name
		
	# 提供公共的set方法修改
	def set_name(self, username):
		self.__name = username
		
	def get_age(self):
		return self.__age
		
	def set_age(self, age):
		self.__age = age
		
	#获取值的时候调用property()的第一个参数
	name = property(get_name, set_name)
	age = property(get_age, set_age)
	
if __name__ == '__main__':
	u = User("张三", 18, "男", "110")
	print(u)
	u.name = "lisi"
	print(u)
	
	# print(u.get_name())
	# print(u.age)
	# u.name = "lisi"
	# print(u.name)
	# u.set_name("lisi")
	# print(u.get_name())

封装的第三种方式:装饰器 @property

class User(object):
	def __init__(self, name, age, gender, tel):
		self.__name = name
		self.__age = age
		self.__gender = gender
		self.__tel = tel
	def __str__(self):
		return "name=" + self.__name
	@property
	def name(self):
		return self.__name
	@name.setter
	def name(self, username):
		self.__name = username
		#如何让外部访问到私有的属性 getter setter
		# 提供公开的get方法访问
		# def get_name(self):
		# return self.__name
		# 提供公共的set方法修改
	#def set_name(self, username):
		# self.__name = username
		
	def get_age(self):
		return self.__age
		
	def set_age(self, age):
		self.__age = age
		
	#获取值的时候调用property()的第一个参数
	# name = property(get_name, set_name)
	# age = property(get_age, set_age)
if __name__ == '__main__':
	u = User("张三", 18, "男", "110")
	print(u.name)
	u.name = "lisi"
	print(u)

	# print(u.get_name())
	# print(u.age)
	# u.name = "lisi"
	# print(u.name)
	# u.set_name("lisi")
	# print(u.get_name())

13.2.2 继承

class RichMan(object):
	def __init__(self):
		self.money = 100000000
		self.company = "阿里巴巴"
	def tell_moto(self):
		print("我没有钱")
		
class Son(RichMan):
	pass

if __name__ == '__main__':
	s = Son()
	print(s.money)
	print(s.company)
	print(s.tell_moto())

私有:子类继承父类的时候并不能继承所有的属性和方法
重写(覆盖):子类继承父类的时候,可以重写方法

注意:重写的时候方法名、参数以及参数的个数必须保持一致

class RichMan(object):
    def __init__(self,money,company):#__init__初始化
        self.money=money
        self.__company=company

    def tell(self):
        return "大儿子没有钱"

    def _speak(self):
        return '大儿子讲英语贼溜'

    def working(self):
        return 'A员工做的好'


class eldest_Son(RichMan):
    def working(self):
        return 'B员工做的好'

class younger_Son(RichMan):
    def working(self):
        return 'C员工做的好'

if __name__ == '__main__':
    s=eldest_Son(1000,'aaa')
    print('小儿子有',s.money,'元')
    print(s.tell())
    print(s._speak())
    print(s.working())

面试题:python里有没有重载,有没有重写
重载:(同名不同参)方法名相同,参数以及参数的个数不同
python里面是没有重载,但是可以实现重载-----通过装饰器

python里面可以多继承
思考问题:A继承B和C,B和C里面都有H(),那么A继承是哪个H()?
广度优先

super关键字 :指针,默认指向的父类

class RichMan(object):
	def __init__(self):
		self.money = 100000000
		self.company = "阿里巴巴"
		self.__house = "北京"
		
	def tell_moto(self):
		print("我没有钱")
		
	def __speak(self):
		print("讲英文贼溜")
		
	def working(self):
		print("A员工工作的认真")
		
class Son(RichMan,object):
	def working(self):
		print("B员工工作认真")
		
	def test(self):
		self.working()
		super().working()
		
if __name__ == '__main__':
	s = Son()
	# print(s.money)
	# print(s.company)
	# print(s.tell_moto())
	# print(s.working())
	s.test()

13.2.3 多态

ArrayList a1 = new ArrayList();
List l1 = new ArrayList();

弱数据类型语言 ,因为不用声明数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值