面向对象初接触(下)

当一个类中的属性条件不满足我们的需求时,考虑到为了不破坏封装,从而对其属性进行增加的实现,就有了以下几种方法

猴子补丁

from test01 import Person
from test001 import get_score

def monkeypatch4Person():
     Person.get_score = get_score

monkeypatch4Person()
if __name__== ‘__main__‘:
   print(print(Person().get_score))

#Person类get_score方法是从数据库拿数据,但是不方便测试,使用猴子补丁,替换了get_score方法,返回模拟的数据

属性装饰器

#把实例的属性保护起来,不让外部直接访问,外部使用getter读取属性和setter方法设置属性
class Person:
     def __init__(self,name,age=18):
         self.name = name
         self.__age = age

     def age(self):
         return self.__age

     def set_age(self,value):
         self.__age = value
通过age 和set_age方法操作属性
class Person:
  def __init__(self,name,age=18):
     self.name = name
     self.__age = age

  @property
  def age(self):
         return self.__age

  @age.setter
  def age(self,age):
         self.__age = age

  @age.deleter
  def age(self,age):
         del self.__age
         print(‘del‘)

tom = Person(‘tom‘)
print(tom.age)
tom.age = 20
print(tom.age)
del tom.age

#特别注意:这三个方法同名

#property装饰器

#后面的函数名就是以后的属性名,他就是getter,这个一定要有,他提供了可读性

#setter装饰器

#与属性名同名,且接受2个参数,第一个是self,第二个是将要赋值的值,有了它,属性可写

#deleter装饰器

#可以控制是否删除属性,少用

#property装饰器必须在前,setter,deleter装饰器在后

#property装饰器能通过简单的方式,把对方法的操作编程对属性的访问,并起到了一定隐藏效果

#也可以如下

class Person:
   def __init__(self,name,age=18):
         self.name = name
         self.age = age
  age = property(lambda self:self.__age)
tom =Person(‘tom‘)
print(tom.age)

对象的销毁

class Person:
  def __init__(self,name,age=18):
      self.name = name
      self.age = age

  def __del__(self):
      print(‘delete {}‘.format(self.name))

tom = Person(‘tom‘)
del tom

python没有方法重载

python是动态强类型语言,赋值及定义,所以定义灵活,不需要指定类型

封装

面向对象的三要素之一
封装:
将数据和操作组织到类中,即属性和方法
将数据隐藏起来,给使用者提供操作,使用者通过操作就可以获取或者修改数据,getter和setter
通过访问控制,暴露适当的数据给用户,隐藏该隐藏的,保护成员或私有成员
时间: 2024-08-09 16:53:53

面向对象初接触(下)的相关文章

linux的初接触

最初衷:当自己的才能不能支配起内心的梦想时,便需要静下心来读读书.知道linux算一个巧合,但既然选择,那便努力一把.这是我的第一篇博文,也是我正式接触linux的所学.愿与大家共勉. ---Aolens 一,Linux比较常见的几个版本以及他们包含的常见的分支: 1,  Debian:ubuntu 2,  Slackware:s.u.S.E 3,  Redhat:CentOS,Fedora,HREL(centos的社区版,由centos调试一些软件是否成功来添加到HREL中         )

vi初接触

它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到n行:nG 最后一行:G 第一行:gg(=1G) 向某个方向移动n个字符: 方向可以用方向键,也可以用 h(左),k(上),l(右),j(下) #向右移动5个字符 eg:5l 寻找词语:/word(向下) ?word(向下) 寻找x,y行之间的单词并替换:x,ys/word/WORD/g (加C可询问处理) #

软工实践练习-Git初接触

第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下来就谈谈Git初接触的心得 1.注册 首先是要在https://github.com/上注册一个自己的账号,账号的注册就没什么可说的.填写用户名,邮箱,密码,然后sign up,这步是在机房时完成的. 2.Git的安装 下载Git,有很多的版本可以选择,我这边下载的是Git-2.5.1-64-bit

Derby初接触

Derby是个java数据库. 第一次接触,用了下druid的连接池. 还是maven下的,下面上代码: pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://mav

初接触Linux,LAMP的构架

今天给大家带来的是LAMP的构架 一.LAMP简介 LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl.PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构.LAMP具有通用.跨平台.高性能.低价格的 优势,因此LAMP无论是性能.质量还是价格都是企业搭建网站的首选平台. 二.相关说明 1.本篇(LAMP系列

初接触Linux,防火墙的规则和语法

今天给大家带来的是防火墙 一.防火墙 防火墙分为网络防火墙和应用层防火墙 1.网络防火墙 网络防火墙就是一个位于计算机和它所连接的网络之间的防火墙.该计算机流入流出的所有网络通信均要经过此防火墙.防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行.防火墙还可以关闭不使用的端口.而且它还能禁止特定端口的流出通信,封锁特洛伊木马.最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信. 2.应用层防火墙 应用层防火墙是在 TCP/IP 堆栈的"应用层&

初接触Linux,使用Xtrabackuo给Mysql(MariaDB)备份

今天给大家带来的是Xtrabackup给mysql(mariaDB)备份 一.Xtrabackup 1.Xtrabackup介绍 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具 2.Xtrabackup的特点 (1)在线热备整个库的InnoDB.XtraDB表 (2)备份过程不会打断正在执行的事务: (3)在xtra

初接触Linux,mysql备份

一.简介 mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等 它可以把整个数据库装载到一个单独的文本文件中.这个文件包含有所有重建你的数据库所需要的SQL命令.这个命令取得所有的模式并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句.这个工具将你的数据库中所有的设计倒转.因为所有的东西都被包含到了一个文本文件中.这个文本

初接触Linux,LVM的备份

今天给大家来的得失LVM相关的备份 一.LVM快照写时复制的特性(copy-on-write,COW) 写时复制快照在快照时间点之后,没有物理数据复制发生,仅仅复制了原始数据物理位置的元数据.因此,快照创建非常快,可以瞬间完成.然后,快照副本跟踪原始卷的数据变化(即原始卷写操作),一旦原始卷数据块发生写操作,则先将原始卷数据块读出并写入快照卷,然后用新数据块覆盖原始卷.这样我们访问快照卷上的数据仍旧是写操作前的,可以保证我们备份数据的一致性.它是一个接近于热备的工具 1.逻辑卷快照事实上是一个逻