修改私有属性的值
-
如果需要修改一个对象的属性值,通常有2种方法
- 对象名.属性名 = 数据 ----> 直接修改
- 对象名.方法名() ----> 间接修改
-
私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。
class Master(object): def __init__(self): self.kongfu = "古法煎饼果子配方" def make_cake(self): print("[古法] 按照 <%s> 制作了一份煎饼果子..." % self.kongfu) class School(object): def __init__(self): self.kongfu = "现代煎饼果子配方" def make_cake(self): print("[现代] 按照 <%s> 制作了一份煎饼果子..." % self.kongfu) class Prentice(School, Master): def __init__(self): self.kongfu = "猫氏煎饼果子配方" # 私有属性,可以在类内部通过self调用,但不能通过对象访问 self.__money = 10000 # 现代软件开发中,通常会定义get_xxx()方法和set_xxx()方法来获取和修改私有属性值。 # 返回私有属性的值 def get_money(self): return self.__money # 接收参数,修改私有属性的值 def set_money(self, num): self.__money = num def make_cake(self): self.__init__() print("[猫氏] 按照 <%s> 制作了一份煎饼果子..." % self.kongfu) def make_old_cake(self): Master.__init__(self) Master.make_cake(self) def make_new_cake(self): School.__init__(self) School.make_cake(self) class PrenticePrentice(Prentice): pass damao = Prentice() # 对象不能访问私有权限的属性和方法 # print(damao.__money) # damao.__print_info() # 可以通过访问公有方法set_money()来修改私有属性的值 damao.set_money(100) # 可以通过访问公有方法get_money()来获取私有属性的值 print(damao.get_money())
例子1:
# 01: 案例 # 自定义人类 class Person(object): def __init__(self, name, age): self.name = name self.age = age self.__money = 10000 # 定义一个公有的方法 # 取值 def get_money(self): return self.__money # 定义一个公有的方法 def set_money(self, new_money): self.__money = new_money # 小明 xm = Person("小明", 20) print(xm.name) print(xm.age) # print(xm.money) # 在某个属性被私有后 还想再类的外部使用对象对他进行访问(取值 赋值) # 解决方案: 通过间接的方式对其进行访问 # 获取私有属性的值 print(xm.get_money()) # 修改私有属性的值 xm.set_money(1000) print(xm.get_money())
例子2:
# 02: 常用 # 自定义人类 class Person(object): def __init__(self, name, age): self.name = name self.age = age self.__money = 10000 # 定义一个公有的方法 # 取值 def get_money(self): return self.__money