Python 对于类的成员没有严格的访问控制限制
关于私有
属性和私有方法,有如下要点:
- 两个下划线开头的属性是私有的(private)。其他为公共的(public)。
- 类内部可以访问私有属性(方法)
- 类外部不能直接访问私有属性(方法),外部可以通过“_类名__私有属性(方法)名”访问私有属性(方法)
class Students:
__company = 'ceb bank'#私有属性
def __init__(self, name, age):
self.name = name
self.__age = age #私有实例属性
def __work(self,job):
return('My job is {0}'.format(job))
def print_company(self):
# 在类内部可以直接调用类的私有属性和私有方法
print('name:{0},age:{1},{2}'.format(self.name,self.__age,self.__work('testwork')))
s1 = Students('zhuj', 18)
print(dir(s1))
print(s1.name)
print(s1._Students__age) #print(s1.__age) #类的私有属性在外部不能直接调用 可用通过 _Students__age 来调用
print(s1._Students__work('testwork1')) # __work() #类的私有方法在外部不能直接调用,可通过 _Students__work来调用
s1.print_company()
[’_Students__age’, ‘_Students__company’, ‘_Students__work’, ‘class’, ‘delattr’, ‘dict’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’, ‘init_subclass’, ‘le’, ‘lt’, ‘module’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘setattr’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘weakref’, ‘name’, ‘print_company’]
zhuj
18
My job is testwork1
name:zhuj,age:18,My job is testwork