学习Python之路之self的用法、内置函数的用法以及私有属性和私有方法
一、self
1、什么是self
self:哪个对象调用的方法self就是哪个方法的引用、
2、self的用法
在类封装的方法内部,self就表示当前调用方法的对象自己
调用方法时。程序员不需要传递self参数(但是定义的时候,第一个参数必须是self)
在方法内部:可以通过self,访问其他对象的属性,还可以调用其他对象方法
3、实例
案例【1】
class Cat:
def eat(self):
print '%s 爱吃鱼' %self.name
def drink(self):
print '%s 爱喝水' %self.name
tom = Cat()
# 给tom对象添加一个属性
tom.name = 'Tom'
tom.eat()
tom.drink()
print tom
lazy_cat = Cat()
# 给lazy_cat对象添加一个属性
lazy_cat.name = 'lazy'
lazy_cat.eat()
lazy_cat.drink()
print lazy_cat
tom = Cat()
tom.name = 'fentiao'
tom.eat()
tom.drink()
注意:在日常开发中,不推荐在类的外部给对象增加属性,如果在运行的时候,没有找到属性,程序就会报错,对象应该包含那些属性,应该封装在类的内部
二、内置方法
1、有什么内置方法?
__del__方法:对象被从内存中销毁之前,会自动调用
__str__方法:返回对象的描述信息,print 对象
__init__初始化方法:专门用来定义一个类具有那些属性和方法的
2、在什么情况下,会调用内置方法
在python中,当一个对象被从内存中销毁之前(把这个对象从内存中删除掉),会自动调用___del__方法
__del__的应用场景:如果希望在对象被销毁之前,在做一些事情,可以考虑__del__方法
在python中,使用python输出对象变量,默认情况下,会输出这个变量引用的对象是由哪一个类创建的,以及在内存中的地址
__str__方法的应用场景:若在开发中,希望使用print输出对象变量时,能够打印自定义的内容,就可以利用__str__这个内置方法了
我们知道用 类名()就可以创建一个对象,当使用类名创建对象时,python的解释器会自动执行以下操作:21.为对象在内存中分配空间--创建对象 2.调用初始化方法为对象的属性设置初始值--初始化方法(__init__方法)
3、实例
案例【1】:
class Cat:
def __init__(self,new_name):
self.name = new_name
print '%s 来了' %self.name
def __del__(self):
print '%s 走了' %self.name
def __str__(self):
# 必须返回一个字符串
return '我是 %s' %self.name
# tom是一个全局变量
# 所以当我们的代码全部执行完之后,系统才会把tom这个对象进行回收
tom = Cat('Tom')
print tom
print tom.name
# del关键字,可以从内存中删除一个对象,del关键字自己调用了__del__方法
del tom
print '*' * 50
生命周期的概念:
生命周期
一个对象从调用类名()创建,声明周期开始
一个对象的__del__方法一旦被调用,生命周期就结束
在对象的生命周期内,可以访问对象的属性,调用对象的方法
案例【2】:初始化方法
class Cat:
def __init__(self,new_name): # 与函数一样
print '这是一个初始化方法'
# self.属性名= 属性的初始值
#self.name = 'Tom'
self.name = new_name
# 在类中 任何方法都可以使用这个self.name
def eat(self):
print '%s 爱吃鱼' %self.name
# 并没有调用__init__方法
# 使用类名()创建对象的时候,会自动调用初始化方法__init__
tom = Cat('Tom')
# 在__init__方法的内部使用 self.属性名= 属性的初始值 定义对象的属性
# 定义属性之后,再使用Cat类创建对象,都会拥有该属性
print tom.name
tom.eat()
lazy_cat=Cat('Lazy_cat')
lazy_cat.eat()
三、私有属性和私有方法
私有属性和私有方法的应用场景,在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到
私有属性就是 对象不希望公开的属性
私有方法就是 对象不希望公开的方法
案例:
class Women:
def __init__(self,name):
self.name = name
# 定义私有属性
self.__age = 18
def __secret(self):
# 在对象的方法内部,是可以访问对象的私有属性的
print '%s 的年龄是 %d' %(self.name,self.__age)
lily = Women('lily')
# 私有属性,在外界不能被直接访问
#print lily.age
# 私有方法,同样不允许在外界直接访问
lily.secret()
因为私有方法或属性不希望被外界访问到,所以在执行时就会出错