python学习day26 封装 property 类方法 静态方法 反射

封装

广义上面向对象的封装 :代码的保护,面向对象的思想本身就是一种
只让自己的对象能调用自己类中的方法

狭义上的封装 —— 面向对象的三大特性之一
属性 和 方法都藏起来 不让你看见

私有属性

class Person:__key = 123  # 私有静态属性def __init__(self,name,passwd):self.name = nameself.__passwd = passwd   # 私有属性def __get_pwd(self):         # 私有方法return self.__passwd   #只要在类的内部使用私有属性,就会自动的带上_类名def login(self):          # 正常的方法调用私有的方法self.__get_pwd()
alex = Person('alex','alex3714')
print(alex._Person__passwd)   # _类名__属性名 虽然能外部调用 但不建议用

 

所有的私有 都是在变量的左边加上双下划綫

  • 对象私有属性
  • 类中的私有方法
  • 类中的静态私有属性

所有的私有的 都不能在类的外部使用,只能在内部使用

父类的私有属性不能被子类调用

会用到私有的场景:

1.隐藏起一个属性 不想让类的外部调用
2.我想保护这个属性,不想让属性随意被改变
3.我想保护这个属性,不被子类继承

property内置装饰器函数

比较重要

@property只在面向对象中使用,将一个方法伪装成一个属性

from math import pi
class Circle:def __init__(self,r):self.r = r@propertydef perimeter(self):return 2*pi*self.r@propertydef area(self):return self.r**2*pic1 = Circle(5)
print(c1.area)     # 圆的面积
print(c1.perimeter) # 圆的周长
# 如果不加property的话,调用需要方法名+括号:print(c1.perimeter()) 

被property装饰的方法不能传任何参数

 

 对对象属性的修改

一般情况下,会定义一个私有属性,再用property装饰一个与私有属性同名的方法,这样可以对这个属性进行查看或者用这个属性进行操作:

class Goods:discount = 0.8def __init__(self,name,price):self.name = nameself.__price = price@propertydef price(self):return self.__price * Goods.discount
apple = Goods('苹果',5)
print(apple.price)

 

# 属性 查看 修改 删除
class Person:def __init__(self,name):self.__name = nameself.price = 20@propertydef name(self):return self.__name@name.deleterdef name(self):del self.__name@name.setterdef name(self,new_name):self.__name = new_name
brother2 = Person('二哥')
del Person.price  # 触发name.deleter下的方法
brother2.name = 'HAHA'  # 改名字时触发name.setter下的方法
print(brother2.name)  #  'HAHA'

 

class_static

classmethod 类方法  ****

通过类直接调用的方法 类.方法  有一个默认参数 cls

这个方法的操作只涉及静态属性的时候 就应该使用classmethod来装饰这个方法

# 类的操作行为
class Goods:__discount = 0.8def __init__(self,name,price):self.name = nameself.__price = price@propertydef price(self):return self.__price * Goods.__discount@classmethod   # 把一个方法 变成一个类中的方法,这个方法就直接可以被类调用,不需要依托任何对象def change_discount(cls,new_discount):  # 修改折扣cls.__discount = new_discount
apple = Goods('苹果',5)
print(apple.price)
Goods.change_discount(0.5)  # 将类的静态属性修改
print(apple.price) # 2.5

 

staticmethod 静态方法  ***

完全面向对象的程序中,如果一个函数,既和对象没有关系 也和类没有关系 那么就用staticmethod将这个函数变成一个静态方法

 

class Login:def __init__(self,name,password):self.name = nameself.pwd = passworddef login(self):pass@staticmethoddef get_usr_pwd():   # 静态方法usr = input('用户名 :')pwd = input('密码 :')Login(usr,pwd)Login.get_usr_pwd()

 

类方法和静态方法 都是类调用的

对象可以调用类方法和静态方法么? 可以 一般情况下 推荐用类名调用
类方法: 有一个默认参数 cls 代表这个类 cls
静态方法:  没有默认的参数 就象函数一样

反射

比较重要

hasattr()和getattr()内置函数

通过字符串能够拿到所对应的属性或方法的值,方法后面要加(),值直接显示

hasattr()和getattr()总在一起,一个判断,一个执行

class Teacher:dic = {'查看学生信息':'show_student','查看讲师信息':'show_teacher'}def show_student(self):print('show_student')def show_teacher(self):print('show_teacher')@classmethoddef func(cls):print('hahaha')
alex = Teacher()
for k in Teacher.dic:print(k)
key = input('输入需求 :')
if hasattr(alex, Teacher.dic[key]):  # 判断这个Teacher.dic[key]字符在不在alex中func = getattr(alex, Teacher.dic[key])  func()  # 'hahaha'

也可以执行类.方法类.对象

if hasattr(Teacher,'func'):ret2 = getattr(Teacher,'func')         # 类.方法  teacher.funcret2()

 

类中属性

静态属性

成员属性

私有属性

类中方法

普通方法 self

静态方法 @staticmethod

类方法 @classmethod

属性方法 @property

内置方法

 

转载于:https://www.cnblogs.com/happyfan/p/10091289.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS统的7个运行级别的含义

CentOS系统有7个运行级别(runlevel) 运行级别就是操作系统当前正在运行的功能级别。级别是从0到6,具有不同的功能。这些级别定义在/ect/inittab文件中。这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d目录下的文件。 #查看系统运行…

noip2004普及组第2题 花生采摘

题目描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”。 鲁宾逊先生和多多都很开心,因为花生正是…

命令补全

yum install -y bash-completion转载于:https://www.cnblogs.com/tony3154/p/10095259.html

Centos查看用户登陆记录

首先简单介绍一下Centos中记录登陆信息的日志文件。 有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文件wtmp中;最后一次登录文件可以用lastlog命令察看。 数据交换、关机和重起也记录在wtmp文件中。所有的纪录都包含时间戳。 每次有一个…

针对科技文章的多标签分类

0. 起 最近没有更新。暑假之后学的东西也比较杂,看了一下基于DL的智能美颜,感觉入了个大坑。前前后后看了传统的轮廓提取算法和FCN等等,调代码巴拉巴拉几个星期就这么过了。前几天看ACM的best paper也觉得很有意思,两个步骤&#…

Centos服务器查看当前的并发数

作为运维人员我们经常需要看下Centos服务器的当前并发数,来了解下服务器当前是否达到并发瓶颈。 那么如何查看呢?使用下面的命令可以分组查看各种连接状态。 netstat -n | awk /^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}返回结果: SYN…

Rest_Framework之频率组件部分

一、RestFramework之频率组件源码部分 频率组件的源码部分和权限组件流程一模一样的,这里就不多说了,直接上源码的主要逻辑部分: def check_throttles(self, request):"""Check if request should be throttled.Raises an app…

CentOS服务器下对mysql的优化

一、mysql的优化思路 mysql的优化分为两方面: 1. 服务器使用前的优化 2. 服务使用中的优化 二、mysql的基础优化步骤 1. 硬件级优化 (1). 最好mysql自己使用一台物理服务器 (2). 内存和CPU方面,根据需求给予…

【使用指南】WijmoJS 前端开发工具包

为方便广大前端开发人员更好的使用 WijmoJS 前端开发工具包,葡萄城专门推出了 WijmoJS 使用指南,该指南详细地介绍了如何把 WijmoJS 各种强大的功能应用到您自己的 Web 项目中,助您轻松掌握产品使用技巧,快速完成产品选型。 本指南…

phpMyAdmin4.4.10安装

1.下载地址: phpMyAdmin4.4.10 https://files.phpmyadmin.net/phpMyAdmin/4.4.10/phpMyAdmin-4.4.10-all-languages.zip Apache 2.4.12(VC9) http://www.apachehaus.com/cgi-bin/download.plx php-5.4.42(VC9&#xff09…

汇编实验九

20171308171 胡欣怡 一、实验目的1. 掌握十进制两位数输出的方法2. 理解 8025 彩色字符模式显示原理3. 综合应用寻址方式和汇编指令完成应用编程二、实验准备1. 复习数值和数字字符之间的转换方法,div 指令用法2. 学习 P187-189 支撑材料及「实验 9 提示」&#xff…

Tensorflow取消占用全部GPU

参考:https://www.cnblogs.com/jiu0821/p/9501665.html Tensorflow默认是会占用全部的GPU,而有时候你根本不需要那么占用那么多GPU资源,这时候就可以采用如下三种方法进行解决: 1、在构造tf.Session()时候通过传递tf.GPUOptions作…

mysql5.7.12安装问题

mysql5.7.6之后不再有data数据目录,需手动初始化数据目录。 在Windows上,使用这些命令之一: C:\> bin\mysqld --initialize C:\> bin\mysqld --initialize-insecure 使用 --initialize为 “缺省安全”安装(会生成一个随机的初始 root密码)。不过密码会被标记为…

P5068 [Ynoi2015]我回来了

传送门 解锁成就:ynoi的题目都做到过原题 因为\(n\)很小,我们可以用\(sss[u][i]\)表示到点\(u\)的距离不超过\(i\)的点的集合,这个可以用bitset存,然后先一遍bfs,再做一个前缀和就可以处理好了 询问的话,把…

U盘安装centos 7 提示 “Warning: /dev/root does not exist, could not boot” 解决办法

安装centos 7时提示 “Warning: /dev/root does not exist, could not boot” 这个问题是没有找到你的U盘,这个配置是需要在上一步需要完成的,但在上一步我们并不知道U盘的文件名,所以索性在这一步查看一下U盘的设备名,然后再回到…

bzoj 3585 mex

Written with StackEdit. 题目描述 有一个长度为\(n\)的数组\({a_1,a_2,...,a_n}\)。\(m\)次询问,每次询问一个区间内最小没有出现过的自然数。 Input 第一行\(n,m\)。 第二行为\(n\)个数。 从第三行开始,每行一个询问\(l,r\)。 Output 一行一个数&#…

ffmpeg转mp4格式

FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 -s 1280x720 -b 1000k uploadfile/mp4/test.mp4

(笔记)网络技术学习交流会

1、网络工程师发展历程 (1)网络管理员阶段 ①计算机硬件的维护 ②计算机系统的维护 ③局域网的维护 ④打印服务的维护 ⑤业务数据的管理(更新、备份) ⑥网站的维护(在网站上进行更新) ⑦在网络上对公司进行…

CentOS 6服务器简单安全配置

1. 禁用不使用的用户 注意:不建议直接删除,当你需要某个用户时,自己重新添加会很麻烦。也可以usermod -L或passwd -l user锁定。 cp /etc/passwd{,.bak}修改之前先备份 vi /etc/passwd编辑用户,在前面加上#注释掉此行 注释的用…

【原创】大叔经验分享(6)Oozie如何查看提交到Yarn上的任务日志

通过oozie job id可以查看流程详细信息,命令如下: oozie job -info 0012077-180830142722522-oozie-hado-W 流程详细信息如下: Job ID : 0012077-180830142722522-oozie-hado-W -----------------------------------------------------------…