### 继承:继承是共享的一种方式:
原始门的一个类:
```
class Door:
def __init__(self, number, status):
self.number = number
self.status = status
def open(self):
self.status = ‘opening‘
def close(self):
self.status = ‘closed‘
```
在原来的门上加上一个锁的功能:
这是一个新的门:
```
class LockableDoor:
def __init__(self, number, status, is_locked):
self.number = number
self.status = status
self.is_locked
def open(self):
if not self.is_locked:
self.status = ‘openning‘
def close(self):
self.status = ‘closed‘
def lock(self):
if self.status == ‘closed‘:
self.is_locked = True
else:
print(‘The door is openning‘)
```
在原来的门上实现锁的功能:
```
class Door:
def __init__(self, number, status):
self.number = number
self.status = status
def open(self):
self.status = ‘opening‘
self.number = number
self.status = status
def open(self):
self.status = ‘opening‘
def close(self):
self.status = ‘closed‘
# 继承Door这个类: [Door可以叫做 父类 ,也可以叫做 超类 或 基类 ]
class Lockable(Door):
def __init__(self, number, status, is_locked):
#super是一个方法,用来调用 父类 的 init 方法来初始化 父类
super(Lockalbe, self).__init__(number, status) #初始化父类
self.is_locked = is_locked
def open(self): #重写
if not self.is_locked:
super(Lockalbe, self).open()
else:
print(‘The door is locked‘)
def lock(self):
if self.status == ‘closed‘:
self.is_locked = True
else:
print(‘The door is openning‘)
```
#### 1.重写与super
* 子类中定义父类的同名方法, 称之为重写
* 子类中调用父类的方法, 使用super对象
* super对象使用super方法生成
* 如果重写了父类的方法,那么要想再次调用父类的方法, 就可以使用 ‘ super(子类名,self).方法() ‘
#### 2.继承可见性
父类的 公有类变量可以继承
父类的 公有实例变量可以继承
私有的方法和变量[类和实例]是不可以继承的
公有的方法和变量[类和实例]是可以继承的
父类公有的方法[类和实例]是可以访问父类的私有变量的
父类的私有方法不能被子类覆盖,因为私有方法是通过改名来实现的
```
class A:
__class_private_var = ‘class private var‘
class_public_var = ‘class public var‘
def __init__(self):
self.__instance_private_var = ‘instance private var‘
self.public_instance_var = ‘instance public var‘
def __instance_private_method(self):
try:
print(self.__class_private_var)
except:
pass
try:
print(self.class_public_var)
except:
pass
try:
print(self.__instance_private_var)
except:
pass
try:
print(self.instance_public_var)
except:
pass
def instance_public_method(self):
try:
print(self.__class_private_var)
except:
pass
try:
print(self.class_public_var)
except:
pass
try:
print(self.__instance_private_var)
except:
pass
try:
print(self.instance_public_var)
except:
pass
@classmethod
def __private_class_method(cls):
try:
print(cls.__class_private_var)
except:
pass
try:
print(cls.class_public_var)
except:
pass
@classmethod
def public_class_method(cls):
try:
print(cls.__class_private_var)
except:
pass
try:
print(cls.class_public_var)
except:
pass
class B(A):
pass
b = B()
dir(b)
```
[003]---第三周_第三部分[继承 / 方法查找]
原文:http://www.cnblogs.com/Roach57/p/5263770.html