2020-11-04

python没有重载

在这里插入图片描述
python动态语言,修改已有类的新方法或者,动态修改类已有的方法都可以

在这里插入图片描述
在这里插入图片描述
这个操作相当于先把play_game的地址赋给我们的person下的play属性在这里插入图片描述

私有属性和私有方法(实现封装)

封装:像手机充电器一样外面就访问不了私有的部分了
但是python不严格,没有严格的访问控制限制

在这里插入图片描述
定义employee 类有2个属性,name 和 age
用e去访问它,访问完,直接打印名字没问题
在这里插入图片描述
现在把age定义成私有属性怎么弄?
在这里插入图片描述
不能这么访问了,想访问用这个
在这里插入图片描述

自己的属性调用自己的方法在类内部是没有问题的,这里work私有方法调用employee类里的私有属性age是可行的
在这里插入图片描述

@property装饰器

在这里插入图片描述
通过@property装饰器把salary方法变成属性来调用,但是并不能像属性一样给salary赋值

在这里插入图片描述
下图,属性的读取和赋值就没有问题,但是假如用户输入错误就会改变属性里salary 的值,我们不能要求用户输入不犯错,所以我们要私有化属性
在这里插入图片描述
先私有化属性,再用set和get方法
在这里插入图片描述
用@property做同样的事情
在这里插入图片描述

面向对象的三大特征

在这里插入图片描述

继承

python支持多重继承,一个子类可以继承多个直接父类
object是所有类的父亲,里面定义了所有类共有的一些属性,比如:new()。
在这里插入图片描述

比如这里的class person的父类就是object

在这里插入图片描述
下图继承关系清晰
子类继承了父类的属性
在这里插入图片描述

在这里插入图片描述

私有化age这个属性,子类就无法调用了

在这里插入图片描述

类成员的继承和重写

在这里插入图片描述
下图不全,但是能看见上边部分的父类方法say_introduce被覆盖了
在这里插入图片描述

mor()方法来查看继承层次结构

在这里插入图片描述
为了查看所有属性,我们可以使用*dir()*来查看所有内置属性。

class Person:
	def _init_(self,name,age):
		self.name = name 
		self.age = age
	def say_age(self):
		print(self.name,"的年龄是::",self.age)	
obj = object()
print(dir(obj))

s2 = Person("高淇",18)
print(dir(s2))	

在这里插入图片描述

重写__str__()方法

object有一个__str__()方法,用于返回一个对于“对象的描述”,对应内置函数str()经常用于print()方法,帮助我们查看对象的信息。str()可以重写。

如果不重写__str__()的话,就会run出内部地址

在这里插入图片描述
在这里插入图片描述

多重继承

python支持多继承(java不能),一个子类可以有多个“直接父类”。这样,就具备了“多个父类”的特点。但是由于,这样会被“类的整体层次”搞得异常复杂,尽量避免使用。

Mro()方法

class C里有A,B的方法,但是看到括号里B在A前面,所以如果用到他们相同的方法 def say(self)的时候, 先用到的是B的say不是A的。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值