Python 面向对象的编程

面向对象的编程 :

        1、类          实现对功能的封装

        2、继承   实现功能的复用

        3、多态   实现接口的复用

类中的变量分为类变量和实例变量  : 类变量是指的类中的变量。实例变量是指的在初始化函数中,声明的变量。

类中的成员分为静态属性和动态属性,一般说的属性指的是静态属性,就是在__init__中的变量。而动态变量是类中的方法。

class  Role :
n_list = []
n = 123 # 类变量 类变量的用途: 大家的共有属性。
# 构造函数
# 在实例化的时候做一些类的初始化的工作
def __init__(self,name,role,weapone,life_value =100,money = 15000 ):
self.name = name # 实例变量(静态属性),作用域是实例本身
self.role = role
self.__life_value = life_value # 加入两个横线就是私有属性 只能通过定义方法访问
self.weapone = weapone
self.money = money
def got_shoot(self):
self.__life_value -= 50
print('%s被打了一枪'%self.name)
def show(self):
print('%s lief_value : %s'%(self.name,self.__life_value))
def buy_gun(self):
print ('%s buy a %s'%(self.name,self.money))

def __del__(self): # 析构函数,会在程序的最后执行。但是,执行了不一定能够回收对象,需要看对象有没有被引用,被引用的话,只是执行这个函数,并不会真正回收对象。

print('%s彻底死了。。。。'%self.name)
r1 = Role('DH','ploice','ak47')
r1.got_shoot()

r1.name = 'dh' # 外部可以修改对象成员的变量
r1.bullet_prove = True # 类里面可以增加新的属性
del r1.weapone # 删除对象 的属性
r1.show()
r1.n_list.append('123')
print(r1.n,r1.name,r1.bullet_prove,)
#print(r1.weapone)
r2 = Role('jack','terrorist','b33')
r2.n = 123 # 相当于构造函数中增加了一个新的成员
r2.n_list.append(234)

Role.n = 'abc'
print(r1.n,r2.n) # 结果 r1.n : 123 r2.n :abc
print(r1.n_list)
print(Role.n_list)

在上图中,当类实例化的时候,会把对象的地址和实例化所需要的变量都传进去,这和c#中的语法有一些不一样,所以在python中,类中所有的方法都需要加入一个self,这个指的就是对象自己的地址。另外,类中的静态属性是在自己的对象中开辟了一块内存来存储的,但是,动态属性(方法)都是共用类中方法的。所以,在方法中,需要传入self,在可以通过地址,作用于当前对象的静态属性。








 

posted on 2018-01-15 21:04  dotiger  阅读(229)  评论(0)    收藏  举报

导航