私有方法和属性的定义:
首先:我们要了解Python中没有关键字来定义类和属性的访问权限,默认是前面不加任何修饰的都是公共的,类似于Java的public,下面看python定义私有的方法和属性
class Person:
def __init__(self):
# 公共的变量
self.name = 'mia'
# 受保护的变量,口头约定,代码没有做限制
self._age = 13
# 私有变量,可以在本类里面用,不可以在外面用
self.__myId = 100000001
# 公共的方法
def call(self):
print('this is public')
# 私有方法
def __run(self):
print('this is private')
这里变量名前加一个下划线_表示受保护的变量,不希望外部访问,但是python未作限制,在外面可以通过变量名直接访问
私有方法和变量的定义就是名字前加两个下划线__,表示是私有的方法和变量
私有方法和属性的访问:
私有属性的访问:
def call(self):
print('this is public')
# 本类内访问私有属性,可以直接访问
print('this is myid',self.__myId)
在本类内可以self点的方式直接访问,本类外的话不可以访问,需要做set和get的封装访问,也就是说用公共的方法访问和设置私有属性,当然你了解了python的命名规则也可以直接访问,这个放后面讲
私有方法的访问:
# 公共的方法
def call(self):
print('this is public')
# 本类内访问私有方法,可以直接访问
self.__run()
同访问私有属性一样,在本类内可以直接访问私有的方法,但是在本类外则不适用,也需要用到公共的方法来简介实现私有方法的调用,上面就是公共的方法里面调用了私有的方法
强制调用私有属性:
上文提过python没有关键字定义私有的方法和属性,这里就可以利用python对私有的方法和属性的命名规则来直接访问私有的方法和属性:
class Player(object):
def __init__(self,name): # 构造函数
# 实例属性
self.__name = name # 私有属性
def __run(self):
print('这里是私有方法')
# 类的继承
class Person(Player):
def __init__(self):
# 调用父类的私有方法
self._Player__run()
# 修改父类的私有属性
_Player__name = 'sss'
这里只需要在父类名前加个下划线_就可以访问私有的属性和方法了,这里不推荐这样做,更推荐用封装的方式访问