魔术方法
类本身有许多内置方法,这些内置方法的开头与结尾都是双底线字符
- init(self):这是类的构造方法,当创建一个类的实例时,就会调用此方法。下列 案例设置类的构造方法是打印类实例本身
class myClass:
def __init__(self):
print (self)
2、str(self):此方法被 str()内置函数与 print 函数调用,用来设置对象以字符串类型出现时如何显示,str()函数的返回值是一个字符串对象。
class myClass:
def __init__(self, arg):
self.name = arg
def __str__(self):
return self.name
3、_del __(self):此方法用于删除类对象。
lass myClass1:
def __init__(self, arg):
self.name = arg
def __del__(self):
print ("你不能删除此类的对象")
x = myClass1("Andre")
del x
当然魔术方法还有很多,我这里只是列举了一些常用的,
访问限制
类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了类内部的复杂逻辑。但是,Python 并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部访问,可以在属性或方法名前面添加单下划线(_foo)、双下划线(__foo)从而限制访问权限。其中,单下划线、双下划线
1、单下划线:(类似java的包访问权限)
_foo:以单下划线开头的表示 protected(保护)类型的成员,只允许 类本身和子类 进行访问,
但不能使用“from module import *”语句导入。
lass Swan:
'''天鹅类'''
_neckswan = '天鹅的脖子很长' # 定义保护属性
def __init__(self):
print("__init__():", Swan._neckswan) # 在实例方法中访问保护属性
swan = Swan() # 创建 Swan 类的实例
print("直接访问:" , swan._neckswan) # 保护属性可以通过实例名访问
2、双下划线:
__foo:双下划线表示 private(私有)类型的成员,只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可以通过“类的实例名.类名__xxx”方式访问
class Student():
'''学生类'''
__age=18 # 定义私有属性
def __init__(self):
print("__init__:",Student.__age) # 在实例方法中访问私有属性
stu=Student() # 创建 Swan 类的实例
print("加入类名:",stu._Student__age) # 私有属性,可以通过“实例名._类名__xxx”方式访问
print("直接访问",stu.__age) # 私有属性不能通过实例名访问,出错