在面向对象,继承是一个很重要的特性
子类与父类,子类是对父类的一种扩展,在父类的属性和方法上进行一些扩展
示例:没带继承
 
#定义一个带编号和状态的门的类
class Door(object):
def __init__(self,num,status):
self.num = num
self.status = status
def open(self):
self.status = 'open'
def close(self):
self.status = 'close'
 
#定义一个可以锁的门的类
class Lockable(object):
def __init__(self,num,status,locked):
self.num = num
self.status = status
self.locked = locked
def open(self):
if not self.locked: #如果没有锁的话,那么我就打开它
self.status = 'open'
else:
print "the door is locked"
def close(self):
self.status = 'close'
======================================================================
======================================================================
======================================================================
上例中我们发现Lockable这个类就是在Door类的基础上增加了一个locked实例变量
和有没有锁的方法,其他地方都是一样的。
#继承
class Door(object):
def __init__(self,num,status):
self.num = num
self.status = status
def open(self):
self.status = 'open'
def close(self):
self.status = 'close'
 
#继承自父类Door
class Lockable(Door):
def __init__(self,num,status,locked):
super(Lockable,self).__init__(num,status) #这里super说明了你构造函数继承了你的父类的num和status两个实例变量,里面的写法是固定的(子类名,self)
self.locked = locked #这里因为你继承了父类,所以我们这里就不用再self.num和self.status给它们赋值,locked是新增的,需要对其赋值
#对open方法进行重载
def open(self):
if not self.locked: #如果没有锁的话,那么我就打开它
#调用父类的方法
super(Lockable,self).open()
else:
print "the door is locked"
 
 
class Unlockable(Door): #这里我定义了一个没有锁的门,并且我什么都不做,它继承了父类Door,即使他什么都不做,Door的方法它也都继承下来了
pass
 
 
u = Unlockable(1,'open')
print (u.status)
 
l = Lockable(1,'open',True)
l.open()
print (l.status)
 
l = Lockable(1,'open',False)
l.open()
print (l.status)
 
 
 
===========================================================================
===========================================================================
===========================================================================
静态方法:
 
@static_method #静态方法,类的工具包
def info() #不用加self,无需实例化,不能访问实例其他信息
 
 
@class_method #类方法,
def info(self): #能访问类变量,不能访问实例变量,不需要实例化,即可调用
 
 
@property #将函数变成静态属性,需实例化方可调用,如果不实例化则仅仅是打印内存地址,调用的时候不需要加()
def sayhi(self): #
print "-----say hi",self.name
return "test"
 
 
m = MyClass()
print (m.sayhi) #会打印出-----say hi
 
如果是这样:
print (MyClass.sayhi) #则仅仅只会打印出<property object at 0x0200F8A0>
 
如果是这样:
print (MyClass.sayhi()) #则会报错
 
 
 
=========================================================================
=========================================================================
=========================================================================
什么情况需要实例化才能调用,什么情况不需要实例化也能调用:
总结:
你只要看到有self的就代表需要实例化才能调用(仅仅在没有那三个特殊方法的情况下)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

最新文章

  1. salesforce 零基础学习(四十四)实现checkbox列表简单过滤功能
  2. [ACM_几何] F. 3D Triangles (三维三角行相交)
  3. Extjs读取本地下拉选框数据源,分为text和value,显示text,传值value
  4. 算法库:OpenCV3编译配置
  5. c语言—临界资源管理
  6. Android与JS混编(js调用android相机)
  7. shu_1241 邮局位置问题
  8. jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题
  9. TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)
  10. 学习笔记——Java数字处理类
  11. [原创]CentOS7安装远程工具teamviewer12
  12. Python档案袋( Socket 与 ScoketServer 通信 )
  13. JMeter接口测试 (二) ~ 参数化
  14. Pandas系列(十六)- 你需要学会的骚操作
  15. 小程序 map组件问题 cover-view问题
  16. MySQL 8 新特性之自增主键的持久化
  17. ORA-12541:TNS:无监听程序 解决办法
  18. spring AOP源码分析(一)
  19. [整理]CSS3 滤镜
  20. 使用线性回归识别手写阿拉伯数字mnist数据集

热门文章

  1. Kettle Unable to get list of element types for namespace &#39;pentaho&#39;
  2. ASP.NET Core 新建项目(Windows)
  3. inputType导致TextView不能多行显示
  4. requests访问https站点证书告警问题
  5. Golang(八)go modules 学习
  6. [Powershell]使用Msbuild构建基于.NET Framework的WebAPI项目
  7. Hystrix(服务熔断,服务降级)
  8. Kelp.Net是一个用c#编写的深度学习库
  9. PHP 函数禁用设置方法
  10. python3 四舍五入(0.5可以进1)