惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Spread Privacy
Spread Privacy
S
Securelist
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
G
GRAHAM CLULEY
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
Scott Helme
Scott Helme
S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
雷峰网
雷峰网
N
News and Events Feed by Topic
宝玉的分享
宝玉的分享
O
OpenAI News
小众软件
小众软件
C
Cybersecurity and Infrastructure Security Agency CISA
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
I
Intezer
Martin Fowler
Martin Fowler
S
Security @ Cisco Blogs
A
Arctic Wolf
Engineering at Meta
Engineering at Meta
U
Unit 42
L
Lohrmann on Cybersecurity
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
Schneier on Security
Schneier on Security
V2EX - 技术
V2EX - 技术
IT之家
IT之家
The Register - Security
The Register - Security
T
Tailwind CSS Blog
GbyAI
GbyAI
量子位
人人都是产品经理
人人都是产品经理
Recorded Future
Recorded Future
W
WeLiveSecurity
AWS News Blog
AWS News Blog
B
Blog RSS Feed
腾讯CDC
Hacker News - Newest:
Hacker News - Newest: "LLM"
Microsoft Security Blog
Microsoft Security Blog

博客园 - 远洪

大模型常用术语 windows 使用sshAgent 加载秘钥 再次认识java反射 再次认识java注解 再次认识java泛型 java中类的分类 java类中的成员变量,静态变量与局部变量 再谈java枚举enum 使用CCProxy让手机访问电脑能访问的网址 playwright启动后报错net::ERR_CERT_COMMON_NAME_INVALID 解决方法 debian 或ubuntu安装使用tigervnc python 实例属性、类属性、实例方法、类方法、静态方法 docker compose使用 docker 自定义网络 Dockerfile 使用 golang进程(主线程)与协程 go语言多态中的类型断言 java中的多态与golang中的多态 golang 定义接口
python面向对象封装,私有变量
远洪 · 2024-03-30 · via 博客园 - 远洪

一、私有变量

“_”单下划线开头的变量:_var  ,表示这些函数和变量是元素私有的或内部使用的,为非强制性(实际可修改也可引用)。

"__"双下划线开头的变量:__var,表示这些函数和变量是元素私有的或内部使用的,为强制性,对象外不可修改或引用。

单下划线例子

class People():
    def __init__(self,name,age):
        self._name = name
        self._age = age

peo = People("aa",22)
print(peo.__dict__)
print(peo._name)
print(peo._age)

双下划线例子

class People():
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

peo = People("aa",22)
print(peo.__dict__)
print(peo.__name)
print(peo.__age)

 二、通过函数获取或修改私有变量

class People():
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

    def get_name(self):
        return self.__name
    def set_name(self,name):
        self.__name = name

peo = People("aa",22)
print(peo.__dict__)
print(peo.get_name())
peo.set_name("bb")
print(peo.get_name())

 三、使用装饰器将函数变为变量,来封装对私有变量的修改

class People():
    def __init__(self,name,age):
        self.__name = name
        self.__age = age

    # 通过该装饰器修饰后,该函数可以像变量一样使用
    @property
    def name(self):
        print("通过函数获取变量")
        return self.__name

    # 通过该装饰器修饰后,该函数可以像变量一样使用
    @name.setter
    def name(self,name):
        if self.__name == name:
            raise Exception("不能和原来的名字相同")
        else:
            self.__name = name

peo = People("aa",22)
print(peo.__dict__)
print(peo.name)
peo.name = "aa"
print(peo.name)