day15-3

成员修饰符

公有的

在类的里面和外面也可以访问

静态字段

1.class foo:
2. aa = "AA"
3.
4.print(foo.aa)

普通字段

1.class foo:
2. def __init__(self):
3. self.name = "haha"
4.
5.obj = foo()
6.print(obj.name)

私有的

  • 以双下划线开头;如:__aa
  • 只能在类里面进行访问;外面是没办法访问的

静态字段

1.class foo:
2. __aa = "AA"
3.
4. def fun(self):
5. print(foo.__aa)
6.
7.# print(foo.aa) # 这样写会报错!
8.
9.obj = foo()
10.obj.fun()

普通字段

1.class foo:
2. def __init__(self):
3. self.__name = "haha"
4.
5.obj = foo()
6.print(obj.__name)

结果显示:

1.Traceback (most recent call last):
2. File "D:/Python练习/Python学习/day17/test.py", line 42, in <module>
3. print(obj.__name)
4.AttributeError: 'foo' object has no attribute '__name'

注意:
普通字段的在类外面访问会报错!

测试继承关系能否访问

1.class foo:
2. def __init__(self):
3. self.__name = "haha"
4.
5.class xxx(foo):
6. def aaa(self):
7. print(self.name)
8.obj = xxx()
9.print(obj.__name)

结果:报错!

总结:
1、成员修饰符有2种

  • 公有的:在那里都可以访问

  • 私有的:不止在外面访问不了;在子类(即:派生类)也是访问不了的;只能自己访问

2、私有的不止普通字符串有这样的特权;其他的,静态字符串;静态方法等成员都一样

3、但是可以通过私有对应类里面的其他方法访问

扩展(不建议用)

如果我非得要访问类中得私有成员;那怎么办那?

1.class foo:
2. def __init__(self):
3. self.__name = "haha"
4.
5.class xxx(foo):
6. def aaa(self):
7. print(self.name)
8.obj = xxx()
9.print(obj._foo__name)

结果:

1.haha
格式

(对象)(.)(_)(类名)(私有对象名)
如:上面例子中得 obj._foo__name

posted on 2016-10-30 00:28  jayafs  阅读(89)  评论(0)    收藏  举报

导航