面向对象学习之<类-私有属性-魔方方法类的初始化-了解析构>

# 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删除实例的名字--同时会把实例里面包含的属性,方法等全部清空(释放内存)---------------------------

 

posted @ 2019-03-26 13:08  上古战神  阅读(219)  评论(0)    收藏  举报