python核心面向对象-属性相关补充-私有化属性

概念

意义:

注意:在python中并没有真正的私有化支持。但是,可以使用下划线完成伪私有化的效果。类属性(方法)和实例属性(方法)遵循相同的规则。

x:公有属性:√类内部访问、√子类内部访问、模块内其他位置访问(类访问(√父类、√派生类)。实例访问(√父类实例、√派生类实例))、夸模块访问(√import形式导入、√from 模块 import * 形式导入)

# class Animal:
#     x = 10
#     def test(self):
#         print(Animal.x)
#         print(self.x)
#     pass
#
# class Dog(Animal):
#     def test2(self):
#         print(Dog.x)
#         print(self.x)
#     pass
#
#
# # 测试代码
# A = Animal()
# # A.test()
#
#
# D = Dog()
# # D.test2()
#
# print(Animal.x)
# print(Dog.x)
# print(A.x)
# print(D.x)


a = 100

_y:受保护的属性:√类内部访问、√子类内部访问、模块内其他位置访问(类访问(!父类、!派生类)。实例访问(!父类实例、!派生类实例)会有警告提示。)、夸模块访问(import形式导入(会有警告提示)、from 模块 import * 形式导入(√有__all__指明对应变量。×没有__all__指明对应变量。会直接报错。无法调用))

class Animal:
    _x = 10
    def test(self):
        print(Animal._x)
        print(self._x)
    pass

class Dog(Animal):
    def test2(self):
        print(Dog._x)
        print(self._x)
    pass


# 测试代码
A = Animal()
# A.test()
#
#
D = Dog()
# D.test2()

print(Animal._x)
print(Dog._x)
print(A._x)
print(D._x)

# __all__ = ["_a"]
_a = 100

__z:私有化属性:√类内部访问、×子类内部访问、模块内其他位置访问(类访问(×父类、×派生类)。实例访问(×父类实例、×派生类实例)会有警告提示。)、夸模块访问:参照_y单下划线开头变量的访问原则。

class Animal:
    __x = 10
    def test(self):
        print(Animal.__x)
        print(self.__x)
    pass

class Dog(Animal):
    def test2(self):
        print(Dog.__x)
        print(self.__x)
    pass


# 测试代码
A = Animal()
# A.test()


D = Dog()
# D.test2()

print(Animal.__x)
print(Dog.__x)
print(A.__x)
print(D.__x)

__all__ = ["_a"]
__a = 100
    私有属性的实现机制:名字重整机制(Name Mangling)->重改__x为另外一个名称,如:_类名__x。目的:防止外界直接访问。防止被子类同名称属性覆盖。

补充:

四个访问区域:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值