一木.溪桥 在Logic Education跟Amy学Python
逻辑教育 :https://logicedu.ke.qq.com
12期:Python基础课
一木.溪桥学Python-12:面向对象编程、私有属性、实例属性、类属性、封装、继承、单继承 、super()
日期:2021年1月11日
学习目标:
- 私有属性
- 类属性
- 封装
- 继承
- 单继承
- super()
学习内容:
私有属性
私有属性与私有方法介绍
- 在实际开发中,对象的某些属性或者方法,只希望在对象的内部使用,这时,我
们就可以使用私有属性和私有方法。
私有属性
-
私有属性: 就是对象不希望公开的属性。
-
定义方式: 在属性名前面增加两个下划线(例如:__name)
-
eg. 练习
定义类为:"人"类
创建对象:rose
初始化对象属性:name 与 age
要求:age 不能在类的外部访问
class People:
def __init__(self, name, age):
self.name = name
# self.age = age
self.__age = age
def print_info(self): # 1.私有属性在类的内部的方法当中是可以访问的
print(self.__age)
def get_age(self): # 2.在类的内部将私有属性返回出来,进行访问
return self.__age
def set_age(self, new_age): # 3.在类的外部对私有属性进行修改
self.__age = new_age
print(f"new age:{self.__age}")
zs = People("zs", 19)
print(zs.name) # zs
# print(zs.age) # 在类的外部访问私有属性报错:AttributeError: 'People' object has no attribute 'age'
# 如何才能在类的外部访问私有属性?
zs.print_info() # 1.私有属性在类的内部的方法当中是可以访问的 19
print(zs.get_age()) # 2.在类的内部将私有属性返回出来,进行访问 19
zs.set_age(50) # 3.在类的外部对私有属性进行修改 new age:50
zs.print_info() # 50
print(zs.get_age()) # 50
zs.set_age(30) # new age:30
zs.print_info() # 30
print(zs.get_age()) # 30
zs.set_age(20) # new age:20
- 需求:一定要在类的外部访问到对象的私有属性,如何实现?
- 方法:
- 可以通过类的内部的方法访问私有属性
- 通过类的内部方法将私有属性返回出去
- 在类的外部调用该方法并且接收
私有方法
-
私有方法: 就是对象不希望公开的方法
-
定义方式: 在方法名前面增加两个下划线(例如:__test)
-
注意:
在 python 中,并没有真正意义上的私有,只有伪私有。当我们在访问时,以对象 ._ 类名 __私有属性即可访问,私有方法同理。但是不建议使用。
class Demo:
def test1(self):
print("--1--")
def __test2(self):
print("--2--")
def test3(self):
return self.__test2()
d = Demo()
d.test1() # --1--
# d.__test2() # 私有方法没有办法直接在类的外部进行访问,报错:AttributeError: 'Demo' object has no attribute '__test2'
d.test3() # 通过类的内部的方法去进行调用 # --2--
# d._Demo__test2() # 注意:可以直接通过 对象._类名__私有方法名() 去访问私有方法,但是不建议使用