首页 > 解决方案 > 在 python 中区分从类(或文件)内部和外部访问类属性

问题描述

让我们在 Python 中有一个示例类 Foo:

class Foo:
    bar = 'bar'
    def access_bar(self):
        return self.bar  

例如,我可以在Foo().bar直接访问时打印警告,但同时在调用Foo().access_bar()从类中访问该属性时不打印此警告吗?

我尝试实现__getattribute__方法,但没有成功区分这些情况。

我知道这是一个很奇怪的问题,但请不要像“你不应该需要这个”那样回答我。

标签: pythonpython-3.7

解决方案


您可以创建bar一个允许控制访问而不向外部显示方法调用的属性,并将您的属性设为私有:

class Foo:
    __bar = 'bar'
    @property
    def bar(self):
        print("direct access")
        return Foo.__bar
    def access_bar(self):
        return self.__bar

f = Foo()

print("warn",f.bar)
print("OK",f.access_bar())

印刷:

direct access
warn bar
OK bar

推荐阅读