Python public private

1. object # public
2. __object__ # special, python system use, user should not define like it
3. __object # private (name mangling during runtime)

4. _object # obey python coding convention, consider it as private


python有关private的描述,python中不存在protected的概念,要么是public要么就是private,但是python中的private不像C++, Java那样,它并不是真正意义上的private,通过name mangling(名称改编(目的就是以防子类意外重写基类的方法或者属性),即前面加上“单下划线”+类名,eg:_Class__object)机制就可以访问private了。

1.class Foo():
2.    def __init__():
3.        ...
4.    
5.    def public_method():
6.        print 'This is public method'
7.
8.    def __fullprivate_method():
9.        print 'This is double underscore leading method'
10.
11.    def _halfprivate_method():
12.        print 'This is one underscore leading method'
实例化Foo的一个对象,
1.    f = Foo()
1.    f.public_method() # OK
2.
3.    f.__fullprivate_method() # Error occur
4.
5.    f._halfprivate_method() # OK
6.
7.    f._Foo__fullprivate()_method() # OK

class A(object):
       def __init__(self):
              self.__private()
              self.public()
       def __private(self):
              print 'A.__private()'
       def public(self):
              print 'A.public()'
class B(A):
       def __private(self):
              print 'B.__private()'
       def public(self):
              print 'B.public()'
b = B()
初探 
正确的答案是:
A.__private()
B.public()


在面向对象编程中,"private"和"public"是用于描述类成员访问权限的关键字。 在Python中,没有严格的私有(private)和公共(public)成员的概念。但是,Python中的一个惯例是,以双下划线("__")开头的属性和方法被视为私有成员,其他的属性和方法被视为公共成员。这种约定并不是强制性的,Python仍然允许通过类实例直接访问私有成员,只是不推荐这样做。 下面是一个示例代码,演示了Python中私有属性和公共属性的定义和访问: ``` class MyClass: def __init__(self): self.__private_attr = '私有属性' self.public_attr = '公共属性' def __private_method(self): print('这是私有方法') def public_method(self): print('这是公共方法') self.__private_method() my_obj = MyClass() print(my_obj.public_attr) my_obj.public_method() ``` 在上面的代码中,`__private_attr`和`__private_method`被视为私有成员,`public_attr`和`public_method`被视为公共成员。尝试通过类实例直接访问私有成员: ``` print(my_obj.__private_attr) # 报错 my_obj.__private_method() # 报错 ``` 会导致AttributeError异常。但是,可以通过以下方式访问私有成员: ``` print(my_obj._MyClass__private_attr) # 输出:'私有属性' my_obj._MyClass__private_method() # 输出:'这是私有方法' ``` 这种方式并不是Python官方推荐的,因为它违反了Python的"we're all consenting adults here"(大家都是成年人,在这里没有严格的限制)的设计原则,所以最好还是遵循Python的约定,将以双下划线开头的属性和方法视为私有成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值