'''
Python 面向对象三大特性之一:封装
Python 中对象的
属性通过getter和setter方法获取以及修改,通过类的构造方法为其赋值(Python中没有无参构造的概念)
类中构造方法定义的属性名如果不以__开头,则对象可以通过对象.属性名的方式来随意访问和修改,如果属性名以__开头,那么对象只能通过属性的getter和setter方法获取或者修改
实际上__属性名在Python 内部被修改为了_类名__属性名,所谓的隐藏其实也是 "假隐藏"
所以不推荐使用__属性名的形式
通常情况下,如果不希望属性被外界直接可见以及修改,可以通过_属性名的方式定义为私有属性,同时提供setter 和getter 方法
'''
class Student:
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
s1 = Student('cris')
print(s1.get_name())
s1.set_name('老二爹')
print(s1.get_name())
class Teacher:
def __init__(self, name):
self._name = name
@property
def name(self):
print('调用了getter方法')
return self._name
@name.setter
def name(self, name):
print('调用了setter方法')
self._name = name
t1 = Teacher('cris')
print(t1.name)
t1.name = 'james'
print(t1.name)