首页 > 其他 > 详细

[003]---第三周_第三部分[继承 / 方法查找]

时间:2016-03-10 23:36:17      阅读:277      评论:0      收藏:0      [点我收藏+]
1.静态方法的作用?
2.反射
3.描述器

### 继承:
继承是共享的一种方式:

原始门的一个类:
```
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!