'''
单下划线、双下划线、头尾双下划线说明:
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问。(约定成俗,不限语法)
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
==============================================================
class Person(object):
def __init__(self, name, age):
# self.name = name
self.__name = name # __name即私有属性,设置 _Person__name = ”yuan“
self.__age = age
def foo(self):
print("姓名:", self.__name) # self._Person__name
def get_name(self): #查看私有属性name方法
return self.__name
def set_name(self, new_name): #修改私有属性name方法
self.__name = new_name
def set_age(self, new_age):#修改私有属性age方法
if new_age < 200:
self.__age = new_age
raise Exception("年龄不能超过两百岁!")
def get_age(self): #查看私有属性name方法
print(self.__age)
#p1 = Person("rain", 22)
#p1.foo() # 姓名: rain
#print(dir(p1)) # ['_Person__age', '_Person__name', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'get_age', 'get_name', 'set_age', 'set_name']
#ret = p1.get_name()
#print(ret) # rain
#p1.set_name("rains")
#print(p1.get_name()) # rains
#p1.age = 10000
#p1.get_age() # 22
#p1.set_age(1560)
#p1.get_age() # Exception: 年龄不能超过两百岁!
######################################################
class Person(object):
def __init__(self, name, age):
# self.name = name
self.__name = name # __name即私有属性,设置 _Person__name = ”yuan“
self.age = age
self._score = 100
def get_name(self):
print(self.__name)
class Teacher(Person):
def get_age(self):
print(self.age)
print(self._score)
yuan = Teacher("xi", 22)
# print(dir(yuan))
yuan.get_name() # xi
'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?