day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)
1. 类的封装及相关操作
# ### oop 面向对象程序开发
"""
#用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念
""" # (1) 类的定义
#
class Car:
pass # 2 推荐
class Car():
pass # 3
class Car(object):
pass # (2)类的实例化
class Car():
pass
# 实例化对象 产生obj对象
obj = Car() # (3)类的基本结构
class Car():
# 成员属性
color = "绿色"
# 成员方法
def didi():
print("小车会滴滴的叫") # 语法上允许,但是严禁使用
class Car():
if 5==5:
print(1234)
# 改成
class Car():
def func():
if 5==5:
print(1234) # (4)类的命名
"""
驼峰命名法: 推荐使用大驼峰命名法 -> mycar => MyCar
"""
class MyHouse():
pass class ChangyuanZhenHaoKan():
pass
OOP面向对象程序开发 示例代码
# ### oop 封装
"""
对象的相关操作
语法:
对象.属性
对象.方法 类中的绑定方法:
(1) 绑定到对象 : 在调用当前方法时,系统自动把该对象当成参数进行传递
(2) 绑定到类 : 在调用当前方法时,系统自动把该类当成参数进行传递
""" # 定义一个车类
class Car():
# 公有属性
color = "屎黄色的" # 私有属性
__logo = "奥利a6" # 公有方法
def drive(self):
print("小车可以驾驶,载人拉客") # 私有方法
def __price(self):
print("车的成本价格保密") # 实例化对象
obj = Car() # (1)实例化的对象访问公有成员属性和方法
# 调用属性
print(obj.color)
# 调用方法
"""obj.drive 系统自动把obj这个对象传递给drive方法中,self这个形参进行接收"""
obj.drive() # (2)实例化的对象动态添加公有成员属性和方法
# 添加属性
obj.color = "天蓝色"
print(obj.color) # 添加方法
# (1) 添加无参方法
def engine():
print("我是2.0发动机")
obj.engine = engine
obj.engine()
# __dict__ 查看对象或者类中的内部成员
print(obj.__dict__) # (2) 添加有参方法
"""
def carname(name):
print("小车的名字是",name)
obj.carname = carname
obj.carname("林肯加长版,前后加辅轮")
"""
# 升级1
"""
def carname(obj,name):
print(obj.color) # 天蓝色
print(name) # 林肯加长版
obj.carname = carname
obj.carname(obj,"林肯加长版")
"""
# 升级2 形成绑定方法(绑定到对象)
def carname(obj,name):
print(obj.color) # 天蓝色
print(name) # 林肯加长版 import types
# MethodType(绑定的函数,绑定的对象) 把那个方法绑定到那个对象上
obj.carname = types.MethodType(carname,obj)
obj.carname("林肯加长80米版") # 只需要自己手动传递一个参数即可,系统自己传递obj # (3) 添加lambda表达式
obj.carlight = lambda : print("把车灯换成手电筒")
obj.carlight()
类的封装-对象的相关操作 示例代码
# ### oop 封装
"""
类的相关操作
# 语法:
类.属性
类.方法
"""
class MyCar():
# 公有属性
oil = 2.0
# 私有属性
__price = "80万" # 公有方法
def oil_info():
print("我的百公里油耗2.0")
# 私有方法
def __price_info():
print("我的价格保密")
"""查看类中的成员"""
dic = MyCar.__dict__
print(dic) # 实例化对象
obj = MyCar()
# 对象无法调用无参方法
# obj.oil_info() error # (1)定义的类访问公有成员属性和方法
# 调用属性
print(MyCar.oil)
# 调用方法
MyCar.oil_info() # (2)定义的类动态添加公有成员属性和方法
# 添加属性
MyCar.logo = "丰田_荣放"
print(MyCar.logo , MyCar.__dict__ ) # 添加方法
# (1) 添加无参方法
def dahuangfeng():
print("我的车能变形,大黄蜂再此")
MyCar.dahuangfeng = dahuangfeng
MyCar.dahuangfeng() # (2) 添加有参方法
def qingtianzhu(name):
print("我的车能变形,我叫{},一柱擎天".format(name))
MyCar.qingtianzhu = qingtianzhu
MyCar.qingtianzhu("擎天柱") # (3) 添加lambda表达式
MyCar.mieba = lambda : print("我是灭霸,人家都叫我爸爸,一个响指,十万八千里")
MyCar.mieba() # (4) 无法在类外调用私有成员
# MyCar.__price_info() error # (5) 对象无法调用无参方法
# obj.mieba()
print(obj.logo)
# obj.abc = 10
# 类不能调用对象中的成员
# print(MyCar.abc) """
总结:
对象调用成员时,先找该对象中是否含有,
如果有,调用自己的,如果没有,调类的(公有的) 对象调用类中成员是单向的,类不能反过来调用对象中的成员; 无论是类还是对象,其中的成员都归属与自己本身,
对象如果没有会调用类中成员,但是类没有的话不会调用对象中成员
是单向的,对象和类都不能互相修改或者删除对方的成员
"""
封装_类的相关操作 示例代码
# ### 1.如果使用类中的私有成员
class Plane():
# 公共属性
captain = "宗永玲" # 私有属性
__air_sistem = 18 # 公有绑定对象方法
def fly1(self):
print("飞机会飞,百公里油耗100L") # 公有无参普通方法
def fly2():
print("飞机会飞,百公里油耗200L") # 私有绑定对象方法
def __fly3(self):
print("飞机会飞,百公里油耗300L") # 私有无参普通方法
def __fly4():
print("飞机会飞,百公里油耗300L") # 定义一个公有绑定方法,调取类中的成员
def pub_info(self): # self 是对象
# self = obj => obj.captain
print(self.captain)
# 利用类内的公有方法,间接获取类中的私有成员(属性)
print(self.__air_sistem)
# 调用公有方法
self.fly1()
# 利用类内的公有方法,间接获取类中的私有成员(方法)
self.__fly3() # 定义一个公有普通方法,调取类中的成员
def pub_info2():
print(Plane.captain) # Plane 是类
print(Plane.__air_sistem)
Plane.fly2()
Plane.__fly4() # 实例化对象
obj = Plane()
# 1.私有成员的改名策略 : _类名__私有名字 (不推荐)
print(Plane.__dict__)
# 调用私有属性
print(Plane._Plane__air_sistem)
# 调用私有方法
obj._Plane__fly3() # 2.利用类中的公有方法,间接调用私有成员 (推荐)
# self 形参接收到obj这个对象
# print(obj.captain)
# obj.pub_info()
Plane.pub_info2() # ### 2.删除类对象中的成员
"""删除的时候,看清该成员的归属"""
# 删除对象中的成员
# 删除属性
obj.captain = "朱京城"
print(obj.captain)
del obj.captain
print(obj.captain) # 删除方法
print(obj.__dict__)
obj.func1 = lambda : print("我是func1")
obj.func1()
del obj.func1
# obj.func1() # 删除类中的成员
# 删除属性
# del Plane.captain
# print(Plane.captain) error # 删除方法
del Plane.pub_info
# Plane.pub_info(obj) error
# obj.pub_info() error # 删除私有成员(不推荐,破坏类中结构)
# del Plane._Plane__air_sistem
# print(Plane._Plane__air_sistem)
删除成员_调用私有成员 示例代码
2. 构造方法
# ### 魔术方法 :特定时机自动触发
"""__init__ 构造方法"""
'''
触发时机:实例化对象,初始化的时候触发
功能:为对象添加成员
参数:参数不固定,至少一个self参数
返回值:无
''' # (1) 基本语法
class MyClass():
def __init__(self):
self.name = "黄乐锡" # 实例化对象
obj = MyClass()
print(obj.__dict__)
print(obj.name) # (2) 传递2个参数
class MyClass():
def __init__(self,name):
# self.成员属性 = 参数值
# name = name
self.name = name # 实例化对象
"""李诗韵默认传递到name形参进行接收"""
obj = MyClass("李诗韵")
print(obj.name) # (3) 多个参数
"""同一个类,可以实例化出多个对象,而对象和对象之间,彼此独立"""
class Children():
def __init__(self,name,skin):
self.name = name
self.skin = skin def eat(self):
print("小孩一下生手里拿了2串大腰子") def drink(self):
print("小孩一下生手里拿了两瓶啤酒") def __sleep(self):
print("小孩一天睡觉时间是23个小时") def pub_info(self):
# 在类中,只能使用对象.属性/方法 或 类.属性/方法进行调用
print("该对象name是{},该对象skin是{}".format(self.name,self.skin)) # 实例化一个对象
datuichui = Children("大铁锤","粉色")
datuichui.pub_info() # 实例化第二个对象
wanggangdan = Children("王钢蛋","黑色")
wanggangdan.pub_info() # 实例化第三个对象
wangbaoqiang = Children("王宝强","绿色")
wangbaoqiang.pub_info()
构造方法 示例代码
day17
day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)的更多相关文章
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础10-函数基础【转】
一,函数的非固定参数 1.1 默认参数 在定义形参的时候,提前给形参赋一个固定的值. #代码演示: def test(x,y=2): #形参里有一个默认参数 print (x) print (y) t ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础07-文件基础【转】
一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...
- Python运维开发基础06-语法基础【转】
上节作业回顾 (讲解+温习120分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 添加商家入口和用户入口并实现物 ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
- Python运维开发基础01-语法基础【转】
开篇导语 整个Python运维开发教学采用的是最新的3.5.2版,当遇到2.x和3.x版本的不同点时,会采取演示的方式,让同学们了解. 教学预计分为四大部分,Python开发基础,Python开发进阶 ...
随机推荐
- Python爬虫老是被封的解决方法【面试必问】
在爬取的过程中难免发生 ip 被封和 403 错误等等,这都是网站检测出你是爬虫而进行反爬措施,在这里为大家总结一下 Python 爬虫动态 ip 代理防止被封的方法. PS:另外很多人在学习Pyth ...
- Spring Boot JDBC 使用教程
总是要用到数据库的嘛,曾经我一度以为,写代码,编程就是搞数据库增删改查,甚至你设计一个系统,大部分时候在为如何设计关系型数据库努力,究其原因,是因为关系型数据库是逻辑的主要呈现. 这个系列,主要是对 ...
- 如何判断WLC的FUS版本
有些时候,我们在升级WLC的时候,被告知需要升级WLC的FUS,以防止某些漏洞和不必要的情况发生. 1.什么是FUS? Field Upgrade Software (FUS),翻译过来,叫“现场升级 ...
- ANSYS初始残余应力赋值
目录 1.建模 2.划分网格并分组 3.所有节点固定约束 4.施加初始残余应力 5.结果 1.建模 建立有限元模型,采用SOLID185单元,模型尺寸0.050.050.02 材料为钢 !程序头 FI ...
- ypACM社团年终赛暨实验室选拔赛题解
记得补题,题目两小时半还是挺困难ak的,毕竟我验题也验了几天的时间,题目基本没有锅.题目基本属于简单题 我的三道题都是很基本的题目,希望大家补题 这些题解都是我写的,如果有疑问可以qq问我 所有的核心 ...
- 重装VisualSVN Server报错
由于eclipse无法连接SVN服务器,尝试着重装SVN,安装到一半时,弹出如下图所示错误: 打开提示窗口输入services.msc,进入服务界面: 发现VisualSVN Server服务无法启动 ...
- linux-命令行快捷方式使用
CTRL+P 命令向上翻滚 CTRL+N 命令向下翻滚 CTRL+U 命令行中删除光标前面的所有字符 CTRL+D 命令行中删除光标后面的一个字符 CTRL+H 命令行中删除光标前面的一个字符 CT ...
- Jquery练习1
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Day11 - B - Dice (III) LightOJ - 1248
设dp_i为已经出现了i面,需要的期望次数,dp_n=0 那么dp_i= i/n*dp_i + (n-i)/n*dp_(i+1) + 1 现在已经i面了,i/n的概率再选择一次i面,(n-i)/n的概 ...
- 类似discuz密码的生成规则
/* 生成一个串,uniqid(rand()): uniqid(prefix,more_entropy) 函数基于以微秒计的当前时间,生成一个唯一的 ID. 如果 prefix 参数为空,则返回的字符 ...