W6_面向对象_封装_继承_多继承_多态

[TOC]

#80.81.82.83.第02章节-Python3.5-面向对象介绍

```
class Role(object):
n = 123 #类变量
def __init__(self,name): #构造函数
self.name = name #实例变量,作用域就是实例本身,又称为类的静态属性
def got_shot(self): #类的方法,又称为类的动态属性
print(self.name,"get shot")

r1 = Role("alex") #实例化
r1.got_shot()
```

#84.第05章节-Python3.5-实例变量与类变量

若类变量与实例变量同名时,优找实例中的变量

```
class Role(object):
n = 123 #类变量
def __init__(self,name,weapon,life_value=100): #构造函数
self.name = name #实例变量,作用域就是实例本身,又称为类的静态属性
self.weapon = weapon
self.__life_value = life_value
def got_shot(self): #类的方法,又称为类的动态属性
print(self.name,"get shot")

def __del__(self): #析构函数
print("%s 彻底死了" % self.name)

r1 = Role("alex","ak47") #实例化
r2 = Role("jack","knife") #实例化
r1.got_shot()
del r2 #销毁实例,其本质是删除变量 ,并非清空内存地址的内容

```
类变量与实例变形:
print(r1.n,r2.n,Role.n,100)
r1.n = "abc" #这样赋值相当于在r1 内存地址中增加了一个变量名为n,并赋值为abc
当r1去找n时,就优先找到自己存内存区域中的n
print(r1.n,r2.n,Role.n,100)

![类与实例](assets/markdown-img-paste-20180813210556626.png)

#85.第06章节-Python3.5-类变量的作用及析构函数

##类变量
类变量的作用:实例共用的属性,节省开销

##析构函数:
在实例释放或销毁时执行的,通常用于做一些收尾工作,比如关闭一些数据库连接,打开的临时文件等

变量名在,则内存地址不被回收,如果变量名被删除,则内存地址到期被回收
del r1 销毁r1实例,即删除变量名

##私有属性
私有属性,不希望其它实例访问
格式:方法或属性前加双下划线即可
```

class Role(object):

def __init__(self,name,life_value=100):
self.name = name
self.__life_value = life_value #加双下划线,表示私有方法,外部不可访问
def got_shot(self):
print(self.name,"get shot")
def show_life_value(self):
print(self.__life_value)

r1 = Role("alex")
r1.got_shot()
r1.show_life_value()
```

#86.第07章节-Python3.5-类的继承

方法垂柳:
```
class People(object):
def __init__(self,name,age):
self.name = name
self.age = age
def eating(self):
print("%s is eating" % self.name)

def sleep(self):
print("%s is sleeping"%self.name)

class Man(People):
def sleep(self): #方法重构,不但实际了父类的方法,还增加了新的功能
People.sleep(self)
print("Man is sleep")

m1 = Man("xiaoming",22)
m1.sleep()
```
#87.第08章节-Python3.5-类的继承2

重构构造函数
```
class Man(People):
def __init__(self,name,age,money): 构造函数重构
People.__init__(self,name,age)
super(Man,self).__init__(name,age) #新式类写法,与上一句功能相同
self.money = money
print("%s 一出生就有%s money"%(self.name,self.money))

def sleep(self):
People.sleep(self)
print("Man is sleep")

m1 = Man("xiaoming",22,100)
m1.sleep()
```

多继承
```
class People(object):
def __init__(self, name, age):
self.name = name
self.age = age

def eating(self):
print("%s is eating" % self.name)

def sleep(self):
print("%s is sleeping" % self.name)


class Relation(object):
def make_friends(self, obj):
print("%s make friends with %s" % (self.name, obj.name))


class Man(People, Relation): # 多继承
pass


m1 = Man("m1", 22)
m2 = Man("m2", 23)
m1.make_friends(m2)

```
#88.第09章节-Python3.5-经典类与新式类的继承顺序

猜你喜欢

转载自www.cnblogs.com/rootid/p/9471768.html