1.面向对象之封装

# ### 面向对象oop -封装
"""
类中封装:
成员属性
成员方法 封装等级:
1.公有:公有成员既能够在类外调用,也可在类内调用
2.私有:私有成员不能够在类外调用,可以在类内调用 调用语法:
对象.属性
对象.方法 类中的绑定方法(方法在类的内部)
(1)绑定到对象(对象调用方法时,系统自动把该对象当成参数进行传递)
(2)绑定到类(对象或者类调用方法时,系统自动把该类当成参数进行传递)
"""
class MyCar():
#公有成员属性
color = "屎黄色的"
#私有成员属性
__logo = "五菱宏光" #公有成员方法
def drive(self):
print("我的小车可以跑高速,可以泡妹纸",self.color) #私有成员方法
def __info():
print("我的价格是保密的,我的油耗也是保密的") #类的实例化
obj = MyCar() #对象的相关操作
#(1)实例化的对象访问公有成员属性和方法
#调用属性
print(obj.color)
#调用方法
'''对象调用方法时,系统会自动把该对象当成参数传递到该方法中
为了保证形参实参一一对应,在定义方法时候,要加形参self,这个方法也叫作绑定方法(绑定到对象0 '''
obj.drive()
#调用私有成员
#obj.__logo #error #(2)实例化的对象动态添加公有成员属性和方法
#添加成员属性
obj.color ="武士黑"
#__dict__查看对象或者类当中的成员,返回一个字典
print(obj.__dict)
print(obj.color)
obj.drive() #添加成员方法
#(1)动态添加无参方法
def dahuangfeng():
print("变形!请叫我大黄蜂") #对象.属性(自定义的) = 方法
obj.dahuangfeng = dahuangfeng
obj.dahuangfeng() #(2) 动态添加有参方法
#1.基础版
def qingtianzhu(name):
print("变形!请叫我一柱擎天,简称{}".format(name)) #对象.属性(自定义) = 方法
obj.qingtianzhu =qingtianzhu
obj.qingtianzhu("擎天柱") #2.升级版
def qingtianzhu(obj,name):
print("变形!请叫我一柱擎天,简称{},我的颜色是{}".format(name , obj.color)) #对象.属性(自定义的) = 方法
obj.qingtianzhu = qingtianzhu
obj.qingtianzhu(obj,"擎天柱") #3.高级版(创建一个绑定方法,自动传递obj对象)在类外,让系统自动帮助传递obj这个对象参数
import types def qingtianzhu(self,name):
print("变形!请叫我一柱擎天,简称{},我的颜色是{}".format(name , self.color)) #通过MethodType 来创建一个绑定方法,自动传递obj对象
#types.MethodType(函数,对象)当调用方法时,自动把对象当成参数传递给该方法
obj.qingtianzhu = types.MethodType(qingtianzhu,obj)
obj.qingtianzhu("擎天柱") #(3) 动态添加lambda 匿名函数
obj.weizhentian = lambda : print("变形! 请叫我威震天")
obj.weizhentian() print(obj.__dict__)

2.类的相关操作

#  ### 类的相关操作

class MyCar():
#公有成员属性
oil ="2.0T"
#私有成员属性
__price = "5000万" #公有无参方法
def oil_info():
print("我的油耗是百公里1000升,发动机是2.0T") #私有无参方法
def __price_info():
print("我的价格信息") #实例化对象
'''
obj = MyCar()
obj.oil_info()
'''
#类的相关操作
#(一)定义的类访问公有成员属性和方法
print(MyCar.oil)
#MyCar.__price #error
MyCar.oi;_info() #(二)定义的类动态添加公有成员属性和方法
#添加公有成员属性
MyCar.logo = "法拉利"
print(MyCar.__dict__) #添加公有成员方法
#(1) 动态添加公有无参方法
def fangxiangpan():
print("制造方向盘的方法")
#类.成员(自定义名字) = 方法
MyCar.fangxiangpan = fangxiangpan
MyCar.fangxiangpan() #(2)动态添加公有有参方法
def engine(dongli):
print("我的发动机是%s"%(dongli)) MyCar.engine = engine
MyCar.engine("四缸发动机") #(3) 动态添加lambda表达式
MyCar.luntai = lambda pinpai:print("我的轮胎使用的品牌是%s" % pinpai)
MyCar.luntai("米其林")
print(MyCar.__dict__) # ### 类和对象之间的注意点
'''
类中的成员只归属当前这个类本身
对象可以调用其中的公有成员,但是没有修改和删除的权利,因为都是归属于类,不是对象中的成员
类无法调用对象中的成员,但是对象可以调用类中的相关成员
''' #对象调用类中成员
'''
调用对象中的成员时,先看看自己有没有该成员
如果有,那就先调用自己的
如果没有,那么就调用类的
'''
obj = MyCar()
print(obj.logo)
obj2.logo = '玛莎拉蒂'
print(obj2.logo)
print(obj.__dict__) #类调用对象中的成员
print(MyCar.logo) #error 报错

3.私有成员之删除成员

# ### 1.类中的私有成员
class Plane():
#公有成员属性
captain = "刘伟"
#私有成员属性
__airsistem = 3 #公有绑定方法
def fly(self):
print("飞机会飞,百公里油耗2万升1") #公有无参方法
def fly2():
print("飞机会飞,百公里油耗2万升2") #私有绑定方法
def __plane_info(self):
print("飞机上的空姐数量是保密的,个数%d" % (self.__airsistem)) #私有无参方法
def __plane_info2():
print("飞机上的空姐数量是保密的,个数%d" % (Plane.__airsistem)) #用pub_info调用私有成员属性和方法
def pub_info(self):
print(self.__airsistem) #3
self.__plane_info() def pub_info2():
print(Plane.__airsistem)
Plane.__plane_info2() obj = Plane()
obj.fly()
Plane.fly2()
print(Plane.__dict__) #(1) 私有成员的改名策略[_类名__成员名](不推荐)
print(obj._Plane__airsistem)
print(Plane._Plane__airsistem) obj._Plane__plane_info()
Plane._Plane__plane_info2() #(2)利用类内的公有方法间接调用私有成员(推荐)
obj.pub_info()
Plane.pub_info2() # ### 2.删除相关成员 #(1)实例化的对象删除公有成员属性和方法
obj.captain = "王思聪"
print(obj.__dict__)
#删除属性
del obj.captain
print(obj.__dict__)
#如果对象有该成员,先调用自己的,没有的话,调用类的,如果都没有,就报错
print(obj.captain) #删除方法
obj.func = lambda : print("开飞机是为了泡妞")
obj.func()
#Plane.func() #error
del obj.func()
#obj.func() #error #(2) 定义的类删除公有成员属性和方法
#删除属性
del Plane.captain
#print(Plane.captain)
#obj.captain #error #对象和类当中没有captain成员 #删除方法
del Plane.fly
obj.fly() #error #注意点
obj.fly = lambda:print('1234')#这个是我自己又定义了一个方法
del Plane.fly #这个删除的是类里面的方法
del obj.fly #这个删除是我刚才定义的
obj.fly() #报错,都被删除了。这个是不同的成员方法 #注意点
obj = Plane() #创建实例对象
obj.fly() #调用类里面的方法
del Plane.fly #删除类调用方法
obj.fly() #再用对象调用方法,报错

4.构造方法之__init__

# ### 魔术方法

#__init__ 魔术方法(构造方法)
'''
触发时机:实例化对象,初始化的时候触发
功能:为对象添加成员
参数:参数不固定,至少一个self参数
返回值:无
''' #(1) 基本语法
class MyClass():
def __init__(self):
print(11)
self.name = '刘伟'
print(22) #实例化对象
print(33)
obj = MyClass()
print(44)
print(obj.name)
print(55) #(2)带有多个参数的构造方法
class MyClass():
def __init__(self,name):
#对象.成员属性(自定义) = 参数值
self.name = name
#实例化(如果构造方法里面含有额外参数,在实例化时,需要传参)
obj = MyClass("刘伟")
print(obj.name) #(3)类可以是1个,对象可以是多个,可以通过一个类实例化多个不同的对象
'''没创建一个对象,都会单独占用一个空间,创建的越多,占用的空间越大'''
class Children():
def __init__(self,name,skin):
self.name = name
self.skin = skin def cry(self):
print("小孩生下直接哭") def drink(self):
print("小孩生下直接吃奶奶") def __eat(self):
print("小孩自己吃自己的手指") def pub_func(self):
print("该对象的名字是{},该对象的肤色是{}".format(self.name,self.skin)) #注意点
def pub_func2(self,name,skin):
print("该对象的名字是{},该对象的肤色是{}".format(name,skin)) #创建第一个对象
afanda = Children("王铁柱","蓝色")
afanda.cry()
afanda.pub_func() #创建第二个对象
dan = Children("王大锤","黑色")
dan.drink()
dan.pub_func() #创建第三个对象
bao = Children("王宝强","绿色")
bao.pub_func() #注意点:
bao.pub_func("刘伟","白色") #报错

面向对象之封装,类的相关操作,私有成员删除,构造方法__init__---day20的更多相关文章

  1. day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)

    1. 类的封装及相关操作 # ### oop 面向对象程序开发 """ #用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念 "" ...

  2. 026.Python面向对象类的相关操作以及对象和类的删除操作

    类的相关操作 定义的类访问共有成员的成员和方法 定义的类动态添加公有成员的属性和方法 定义的类删除公有成员的属性和方法 1 定义一个基本的类 #定义一个类 class Plane(): #添加一个共有 ...

  3. Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type())

    Python进阶----类的结构(公有成员 , 私有成员(私有属性,私有方法),类方法,静态方法,属性) ,isinstance 和issubcalss ,元类(type()) 一丶类的结构细分    ...

  4. 面向对象的JavaScript(3):私有成员和公开成员

    在小项目中对于JavaScript使用,只要写几个function就行了.但在大型项目中,尤其是在开发追求 良好的用户体验的网站中,如SNS,就会 用到大量的JavaScrpt,有时JavaScrip ...

  5. Objective-C的面向对象中,类有真正的私有方法和私有属性么?

    在Java/C#等面向对象语言中,方法的访问权限可以通过public/private/protected来控制其访问权限.而在OC中,方法却并没有访问修饰符.那么,我们有没有办法使其方法变为私有? 1 ...

  6. Python 中的类的相关操作

    构造函数 构造函数是任何类都有的特殊方法.当要创建一个类时,就要调用构造函数.他的名字是__init__.init的前后分别是两个下划线.时间类Time的构造函数如下: >>> cl ...

  7. 设计模式-Facade(结构型模式) 针对 最终类的实现通过一系列类的相关操作,重点关注 起始与结尾的操作。

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Facade.h #pragma once class Subsystem1 { public: Subsystem1() ...

  8. Python 基础之面向对象初识与类的封装

    一.面向对象类的初识 1.类的定义 #三种方式:#1.class MyClass:    pass #2.推荐class MyClass():    pass #3.class MyClass(obj ...

  9. 分别设计点类Point和圆类Circle,点类有两个私有数据纵坐标和横坐标;圆类有也两个私有数据圆心和半径,其中圆心是一个点类对象;要求如下所述: (1) 通过构造方法初始化数据成员,数据成员的初始化通过构造方法的参数传递;(2) 分别编写点和圆的输出函数,其中圆的输出包括圆心和半径的输出;点的输出x,y;

    题目相对简单: package naizi; public class Circle { //私有成员及构造方法 private Point center; private int r; Circle ...

  10. JS 的私有成员为什么钦定了 #?

    翻译自 tc39/proposal-class-fields 译者按:社区一直以来有一个声音,就是反对使用 # 声明私有成员.但是很多质疑的声音过于浅薄.人云亦云.其实 TC39 早就对此类呼声做过回 ...

随机推荐

  1. 【转帖】【漏洞提示】MySQL8.0.29因重大bug官网已下架

    前阵子,MySQL官网已经将 MySQL 8.0.29版本下架.据悉下架原因是由于MySQL 8.0.29 存在关于InnoDB解释器的重大Bug.而最新版本 8.0.30及以上的版本已修复此漏洞.各 ...

  2. Redis lua脚本简要学习

    Redis lua脚本简要学习 背景 上周督促客户从Windows平台升级到了Linux平台. redis一周相安无事. 但是这周一突然又出现了卡断和慢的情况. 只能继续进行分析. 分析思路 现场日志 ...

  3. 【转帖】【ethtool】ethtool 网卡诊断、调整工具、网卡性能优化| 解决丢包严重

    目录 即看即用 详细信息 软件简介 安装 ethtool的使用 输出详解 其他指令 将 ethtool 设置永久保存 如何使用 ethtool 优化 Linux 虚拟机网卡性能 ethtool 解决网 ...

  4. PostgreSQL简单添加只读用户的方法

    1. 添加了白名单只读来避免开发同事错误的修改数据库内的数据, 但是他们总想去查询数据库的内容. 最简单的办法是修改pg_hba.conf添加只读用户. 2. 添加只读用户. 使用psql登录pg数据 ...

  5. mysql 的outfile以及infile 语法简单备份恢复表

    今天学习 姜老师的 mysql技术内存innodb存储引擎时看到了有一个outfile和infile的语法,感觉挺好的, 这里面进行一下简单的学习与验证. oufile 可以到处文件 infile 可 ...

  6. Linux 排除某些目录下 重复jar包的方法

    Linux 排除某些目录下 取重复jar包的方法 find . -path ./runtime/java -prune -o -name '*.jar' -exec basename {} \;| s ...

  7. CoreDNS的配置文件修改

    CoreDNS的配置文件修改 今天浪费了4个小时来调整coredns 这里简单记录一下 注意修改点: 1 kubernetes cluster.local. 需要增加集群内的配置 2 forward ...

  8. 【K哥爬虫普法】淘宝一亿快递信息泄漏,有人正在盯着你的网购!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  9. 【JS 逆向百例】网洛者反爬练习平台第一题:JS 混淆加密,反 Hook 操作

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  10. shell 两个数组比较,得到元素的并集、交集等

    linux shell 实现数组比较,取元素的并集.交集时,可以使用sort排序.uniq统计和awk数据过滤. shell 实现如下 file_list_1=("test1" & ...