zoukankan      html  css  js  c++  java
  • Python之 ---成员修饰符

    一:成员修饰符:分为共有成员和私有成员:

    私有成员:__通过两个下滑线;无法直接访问,要访问只能间接访问;

    如下我们定义了一个对象,里面有两个共有的成员变量,成员变量是共有的时候我们可以外部访问,如果私有的我们不能访问:

    1 class Goo:
    2     def __init__(self,name,age):
    3         self.name=name
    4         self.age=age
    5 obj=Goo('wing',12)
    6 print(obj.age)

    如上可以访问,obj.age可以访问;

    1.2如下显示的是私有的成员变量:无法外部访问

     1 class Goo:
     2     def __init__(self,name,age):
     3         self.name=name
     4         self.__age=age
     5 obj=Goo('wing',12)
     6 print(obj.__age)

    10 执行结果: 11 Traceback (most recent call last): 12 File "D:/Study/面向对象/成员修饰符.py", line 13, in <module> 13 print(obj.__age) 14 AttributeError: 'Goo' object has no attribute '__age'

    如上提示是私有的无法访问

    1.3如上的不能直接访问,我们可以通过如下的方法间接访问:

    1 class Goo:
    2     def __init__(self,name,age):
    3         self.name=name
    4         self.__age=age
    5     def show(self):
    6         return self.__age
    7 obj=Goo('wing',12)
    8 ret =obj.show()
    9 print(ret)

    1.4只要带有下滑——的都不可以访问了:

    1 class fOO:
    2     def __show(self):
    3         return 123
    4 obj=foo()
    5 ret =obj.__show()
    6 print(ret)

    执行结果:
    1 Traceback (most recent call last):
    2   File "D:/Study/面向对象/成员修饰符.py", line 13, in <module>
    3     print(obj.__age)
    4 AttributeError: 'Goo' object has no attribute '__age'

    1.5私有方法也可以通过间接访问,我们可以定义一个共有的方法,然后通过共有的方法,简接的访问私有的私有的方法,然后通过对象调用共有的方法,然后通过间接访问来访问私有的方法;

     1 class Foo:
     2     def __show(self):
     3         return 123
     4 
     5     def f2(self):
     6         return self.__show()
     7 
     8 obj=Foo()
     9 ret=obj.f2()
    10 print(ret)

    1.6那我们现在来思考一个问题:如果父类里面有私有成员,我们在子类里面能够访问吗?

     1 class Foo:
     2     def __init__(self):
     3         self.__gene=123
     4 class F(Foo):
     5     def __init__(self,name):
     6         self.name=name
     7         self.__age=12
     8         super(F,self).__init__()
     9     def show(self):
    10         print(self.__age)
    11         print(self.__gene)
    12 s=F('aaa')
    13 s.show()

    执行结果:

    1 F:python3python.exe D:/Study/面向对象/成员修饰符.py
    2 Traceback (most recent call last):
    3   File "D:/Study/面向对象/成员修饰符.py", line 31, in <module>
    4     s.show()
    5   File "D:/Study/面向对象/成员修饰符.py", line 29, in show
    6     print(self.__gene)
    7 AttributeError: 'F' object has no attribute '_F__gene'

    通过上述案例说明:子类的不可以访问父类的私有的成员,如果想要访问,我们需要在父类里面间接的访问私有的成员,然后子类继承了父类,子类的对象,直接可以调用父类的那个间接的方法,就可以间接的访问父类的私有的成员变量了;

  • 相关阅读:
    需要学习的技术
    Building wheel for uwsgi (setup.py) ... error 解决问题
    version `ZLIB_1.2.3.4‘ not found 解决方法
    module 'tensorflow' has no attribute 'space_to_depth'(已解决)
    python语法—命名元祖、偏函数
    python—set集合比较(交集、并集,差集)
    websocket接口测试
    linux根目录扩容方法
    django—问题—中文编码格式报错 、分页warning
    python—使用sorted对字典进行排序
  • 原文地址:https://www.cnblogs.com/surewing/p/7767451.html
Copyright © 2011-2022 走看看