# Author:Ju BO
'''
类
属性
方法
'''
'''
在python中有两种私有属性,一个是在属性前面加一个下划线,可以访问
一个是在属性前面加两个下划线不可以直接访问
'''
class Person: #定义类: class + 类名
name = "moran01" #属性1
_age = 19 #属性2
__sex = "男" #属性3
def eat(self): #方法,函数在类中称为方法.
print(self.name + "正在吃东西")
moran =Person() #实例化,实例一个对象.
print(moran._age) #调用类的属性.
# print(moran.__sex) #强行调用,不能调用,
print(dir(moran)) #使用此办法查找
print(moran._Person__sex)
moran.eat() #调用类中的方法
# --------------使用魔法方法类的初始化--在类实例化的时候触发------------------------------
class Person:
def __init__(self,name,age,sex): #self代表实例本身.name\age\sex代表外面传进来的参数,
# 传进来之后再赋值给实例本身的name\age\sex
self.name = name
self.age = age
self.sex = sex
#jirke = Person() #通常实例的时候是这样实例,不会报错,但在使用了魔方方法时,在类的实例化时该方法会被触发,因此会报错,报错如下:
# TypeError: __init__() missing 3 required positional arguments: 'name', 'age', and 'sex'
# 该报错提示缺少三个必备参数
# 正确写法应该这样写:
jirke = Person("卢瑟",18,"男") #jirke现在就相当于self,那么上面的self.name self.age self.sex也就相当于jirke.name,jirke.age,jirke.sex
#用jirke.的时候可以把实例属性点出来
print(jirke.name) #卢瑟
print(jirke.age) #18
print(jirke.sex) #男
# 再去实例化一个对象
daxi = Person("xiyo",18,"女") #每个实例的对象具有的实例属性是不一样的
#用daxi.的时候可以把实例属性点出来
print(daxi.name) #xiyo
print(daxi.age) #18
print(daxi.sex) #女
# -----------------析构使用del删除实例的名字--同时会把实例里面包含的属性,方法等全部清空(释放内存)---------------------------