# *类
## 定义,属性,初始化,析构
#面向对象,eg:自己做饭or别人做饭
#面向过程,eg:煮饭=洗菜-切菜-抄菜-出锅-吃饭
#类 封装一些共有的事物,把具有共有特点的事物放在一个类里
#命名规则:驼峰命名法(首字母大写)
eg:
class GirlFriend:
_sex='女'
hobby='做饭'
__age=18
xiaohua=GirlFriend#此处可加()也可不加,不加括号使用同原地址,加括号另开一空间
ruhua=GirlFriend()
print(xiaohua._sex,xiaohua.hobby)
print(id(xiaohua),id(ruhua))
xiaohua.study='超会学习'
ruhua.k='as'#实例(新地址)修改属性,不会影响原类的属性
print(ruhua.study)
print(xiaohua.k)#-->报错
#_sex 一个下划线 只是做一个简单的标记,可以正常使用
#__age 两个下划线代表特有属性,实例不能直接访问,可通过dir查看访问方式
print(xiaohua.__age)#-->报错
print(xiaohua._GirlFriend__age)#dir查询后
#注:python里无绝对私有
## 方法
#类里放函数既是方法
eg:
class Person:
def __init__(self,name,girlfriend):#魔法方法,在python中以双下划线开头和结尾的称为魔法方法 每一个魔法方法都有其特有的作用
self.name=name#__init__-->作用:初始化,实例化时传属性
self.girlfriend=girlfriend
def num(self):#self 谁去使用self self就是谁
# print(xiaohong.name)
# print(self.name)
print('self的id是%s'%id(self))
print(self.name)
def op(self):
print('%s和%s大吃一顿'%(self.name,self.girlfriend))
#xiaohong=Person('1','2')#实例化(实例时无法添加属性)
#xiaohong.name='xiaohong'#此处self=小红(实例化后可添加实例属性)
# xiaohong.num()
# print('小红的id是%s'%id(xiaohong))
# xiaohei=Person()
# xiaohei.num()#新起一个地址后,self的id值也随之变化
hans=Person('寒沙','小姐姐')
hans.op()
hans.num()#实例属性只针对于该实例
# 析构
#clear 删除所有元素 del 释放该序列空间
#python的垃圾回收机制 程序运行完后所有内存空间都会释放
eg:
# li=[12,3,4]
# del li#释放掉该空间
# print(li)#报错
class Person:
def __del__(self):
print('这里调用了del方法,在删除全部指向后')
x=Person()
del x#这里释放了Preson所以后面不会调用del方法
print('*'*10)#程序执行完后调用del方法