Python 名称修饰 隐藏函数 隐藏属性

python内部会把__前缀的属性重命名为【_类名+属性名】;
因此在python中如果一个属性不是共有的就约定使用双下划线__为前缀,它不会调用任何名称修饰的算法,只是说名这个属性是该类的私有属性。


class User1:
def __init__(self, name, age, address, course, grade=None):
self.__name = name
self.age = age
self.__address = address
self.__course = course
self.__grade = grade

def __hai(self, msg):
print(msg)


u1 = User1("1", 2, 3, 4)
print("u1.__name:", u1._User1__name) # 隐藏的变量(也叫名称修饰)被调用的时候 调用格式 _类名__变量
u1._User1__name = "abc"
print("u1.__name:", u1._User1__name) # 输出abc
u1._User1__hai("test") # 方法也可以隐藏
u1.age = 3
print(u1.age) # age没有被隐藏,可以直接调用




# 第三个 阶段
# getter\setter
class User2:
def __init__(self, name, age, address, course, grade=None):
self.__name = name
self.__age = age
self.__address = address
self.__course = course
self.__grade = grade

def set_name(self, name):
if isinstance(name, str): # isinstance 判断变量是否符合右边的类型
self.__name = name
else:
self.__name = str(name)

def get_name(self):
return self.__name # 隐藏的变量(名称修饰)在实例内部可以直接调用,用对象不可以调用

print("===========")
u2 = User2("xiaowang", 2, 3, 4)
print(u2.get_name())

u2.set_name("xiaozhang") # 方法没有被修饰,所以可以直接调用
print(u2.get_name())

u2.set_name(123)
print(u2.get_name())
print(type(u2.get_name()))
posted @ 2021-03-10 18:44  Mia妈妈加油呀  阅读(497)  评论(0)    收藏  举报