python学习——魔术方法与访问限制

魔术方法

类本身有许多内置方法,这些内置方法的开头与结尾都是双底线字符

  1. 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)      #     私有属性不能通过实例名访问,出错

猜你喜欢

转载自blog.csdn.net/weixin_45795349/article/details/104994838