目录
私有属性
1. 私有属性是指在类内可以直接访问、而在类外无法直接访问的属性
2. Python中规定,在定义类时,如果一个类属性名是以__(两个下划线)开头,则该类属性为私有属性
举例
class Student:
name = '未知'
__id = '未知'
def SetInfo(self, newname, newid):
self.name = newname
self.__id = newid
def PrintInfo(self):
print("姓名:%s, 身份证号:%s"%(self.name, self.__id))
if __name__ == '__main__':
stu = Student()
stu.SetInfo("小明", "25256326")
stu.PrintInfo()
# 错误写法:print("身份证号:%s" % (stu.__id))
# 正确写法:print("身份证号:%s" % (stu._Student__id))
注:实际上,Python中并不存在无法访问的私有属性。如果在类中定义了一个私有属性,则在类外访问该私有属性时需要在私有属性名前加上“_类名”,即可正常运行。
print("身份证号:%s" % (stu._Student__id))
构造方法
1. 构造方法是Python类中的内置方法之一,它的方法名为__init__,在创建一个类对象时会自动执行,负责完成新创建对象的初始化工作。
只有一个参数的构造方法示例
class Student:
def __init__(self):
print("构造方法被调用")
self.name = "未知"
def PrintInfo(self):
print("姓名: %s"%self.name)
if __name__ == '__main__':
stu = Student() # 创建Student类对象stu,自动执行构造方法
stu.PrintInfo()
# 输出
'''
构造方法被调用
姓名: 未知
'''
带默认参数的构造方法示例
class Student1:
def __init__(self, name = '未知'): #定义构造方法
print("构造方法被调用")
self.name = name #将self对应对象的name属性赋为形参name的值
def PrintInfo(self):
print("姓名:%s"%self.name)
if __name__ == '__main__':
stu1 = Student1()
stu2 = Student1("小明")
stu1.PrintInfo()
stu2.PrintInfo()
# 输出
'''
构造方法被调用
构造方法被调用
姓名:未知
姓名:小明
'''
析构方法
1. 析构方法是类的另一个内置方法,它的方法名为__del__,在销毁一个类对象时会自动执行,负责完成待销毁对象的资源清理工作,如关闭文件等。
注:类对象销毁有如下三种情况:
(1)局部变量的作用域结束
(2)使用del删除对象
(3)程序结束时,程序中的所有对象都将被销毁
class Student:
def __init__(self, name):
self.name = name
print("姓名为%s的对象被创建"%self.name)
def __del__(self):
print("姓名为%s的对象被销毁"%self.name)
def func(name):
stu = Student(name)
if __name__ == '__main__':
stu1 = Student("小明")
stu2 = Student("马红")
stu3 = stu2
del stu2
func("张刚")
del stu3
stu4 = Student("刘健")
# 输出
'''
姓名为小明的对象被创建
姓名为马红的对象被创建
姓名为张刚的对象被创建
姓名为张刚的对象被销毁
姓名为马红的对象被销毁
姓名为刘健的对象被创建
姓名为小明的对象被销毁
姓名为刘健的对象被销毁
'''
注:如果多个变量对应同一片内存空间,则只有这些变量都删除后才会销毁这片内存空间中所保存的对象,也才会自动执行析构方法
1. 判断题
析构方法可以没有形参。
A.正确
B.错误
正确答案:B
解析:析构方法应有一个形参self,对应正在销毁的对象。
常用内置方法
1. __str__
调用str函数对类对象进行处理时或者调用Python内置函数format()和print()时自动执行,__str__方法的返回值必须是字符串
class Complex:
def __init__(self, real, image):
self.real = real
self.image = image
def __str__(self):
return str(self.real)+'+'+str(self.image)+'i'
if __name__ == '__main__':
c = Complex(3.2, 5.3)
print(c)
#输出
'''
3.2+5.3i
'''
2. 比较运算的内置方法
内置方法 | 功能描述 |
---|---|
__gt__(self, other) | 进行self>other运算时自动执行 |
__lt__(self, other) | 进行self<other运算时自动执行 |
__ge__(self, other) | 进行self>=other运算时自动执行 |
__le__(self, other) | 进行self<=other运算时自动执行 |
__eq__(self, other) | 进行self==other运算时自动执行 |
__ne__(self, other) | 进行self!=other运算时自动执行 |
示例
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def __le__(self, other):
return self.age < other.age
if __name__ == '__main__':
stu1 = Student("小明", 19)
stu2 = Student("小红", 20)
print("马红的年龄小于等于小明的年龄:", stu2 <= stu1)
# 输出
'''
False
'''
判断题
1. __str__方法的返回值可以是整数。
A.正确
B.错误
正确答案:B
解析:__str__方法返回的数据必然是字符串。