1 class Dog(object): 2 n=123 3 name='类变量name' 4 n_list=[] 5 6 def __init__(self,name,life_value=100): #传参数 7 self.name=name 8 self.__life_value=life_value 9 10 def __del__(self): 11 print("%s dead"% self.name) 12 13 def show_status(self): 14 print("test 私有变量调用 name:%s,life_value:%s" %(self.name,self.__life_value)) 15 16 def bulk(self): 17 print("%s is wang wang wang" % self.name) 18 19 d1=Dog("huanhuan") 20 d1.bulk() 21 print("d1:",d1.name,d1.n) 22 d1.n_list.append('d1,') 23 d1.wierd=True #增 24 print("d1:",d1.name,d1.n,d1.n_list,d1.wierd) 25 d1.show_status() 26 del d1.n #删 27 28 del d1 29 30 d2=Dog('lele') 31 d2.n_list.append('d2,') 32 print("d2:",d2.name,d2.n,d2.n_list) 33 34 print("Dog:",Dog.name,Dog.n,Dog.n_list)
面向对象三特性:封装,继承,多态。
封装:将类的功能的实现细节对外部来说是透明的。
继承:代码的重用。
多态:一种接口,多种实现。
构造函数:实例化过程中做一些初始化的工作,传参。
def __init__(self,name,life_value=100): #传参数
7 self.name=name
8 self.__life_value=life_value
调用:d1=Dog('huanhuan')
展开来看:
d1.name='huanhuan'
d1.__life_value=100
析构函数:在实例释放、撤销时,做收尾工作,如断开数据库连接,关闭已打开的临时文件
def __del__(self): 11 print("%s dead"% self.name)
28 del d1 #删除d1实例,(门派号没了,房子可以拆了),销毁对象,执行析构函数
而程序中没有写del d2,所以d2对象析构函数的调用是在整个程序结束时。
私有属性、私有方法:外部不能直接调用,必须通过类的其他方法才能调用。
8 self.__life_value=life_value (前面有__)
调用:
13 def show_status(self):
14 print("test 私有变量调用 name:%s,life_value:%s" %(self.name,)
不能直接在外部print(self.__life_value)会报错
#私有方法
def __sleep(self): print('私有方法:%s is sleeping' %self.name) #调用私有方法 def show_status(self): self.__sleep()