Python学习第八节
一、方法的重载
class AA:def Aa(self):print("ABC")def Aa(self,a): # 默认执行这个方法print("abc")BB = AA()
BB.Aa() # 不带参会报错,默认值执行最后一个方法
默认执行最后一个方法:
class AA:def Aa(self):print("ABC")def Aa(self,a): # 默认执行这个方法print(a)BB = AA()
# BB.Aa() # 不带参会报错,默认值执行最后一个带参方法
BB.Aa("你好") # 执行带参方法
1、方法的动态性
class AA:def Aa(self):print("ABC")def aA(self,a):print(a)def Bb(a):print("大家好")BB = AA()
BB.Aa()
AA.Aa = Bb # 将Bb方法的地址给到了Aa方法里改写了Aa方法
BB.Aa() # 输出改写后的Aa方法
二、私有属性和私有方法(实现封装)
class AA:def __init__(self,a ,b):self.__va = a * 2 # 私有属性:双下划綫 + 标识符self.vb = b * 2print(a, b)B = AA(1,2)
print(B.vb)
print(B.__va)
注:无法直接访问到 __va属性,应改为以下方法:
class AA:def __init__(self,a ,b):self.__va = a * 2 # 私有属性:双下划綫 + 标识符self.vb = b * 2print(a, b)B = AA(1,2)
print(B.vb)
print(B._AA__va) # 下划线 + 类名 + 双下划綫 + 私有属性
1、私有方法
class AA:def __init__(self,a ,b):self.__va = a * 2 # 私有属性:双下划綫 + 标识符self.vb = b * 2def __Aa(self): # 私有方法print("SSS")B = AA(1,2)
B._AA__Aa() # 调用方法和私有属性一样
2、类内部调用私有属性和方法
class AA:def __init__(self,a ,b):self.__va = a * 2 # 私有属性:双下划綫 + 标识符self.vb = b * 2def __Aa(self):print("SSS")def bb(self):print(self.__va) # 类内部调用私有属性:self + 私有属性名self.__Aa() # 类内部调用私有方法:self + 私有方法名B = AA(1,2)
B.bb()
三、@property装饰器
class AA:def __init__(self,a):self.__A = a #创建一个私有属性def get_A(self): # get方法获取私有属性return self.__Adef set_A(self,a): # set方法设置私有属性if 0 < a < 10:self.__A = aelse:print("数据超过范围!")
AB = AA(1)
AB.set_A(5) # 调用set方法设置私有属性数值
print(AB.get_A()) # 输出数值
1、@property:
class AA:def __init__(self,a):self.__A = a@property # 声明propertydef Aa(self):return self.__A@Aa.setter # 声明对Aa的值设定:方法名.setter。 同理获取就是:方法名.getterdef Aa(self,a):if 0 < a < 10:self.__A = aelse:# self.__A = 1print("数值超出范围")BB = AA(1)
BB.Aa = 6 # 设置私有属性__A的值
print(BB.Aa) #输出__A的值
BB.Aa = 11
print(BB.Aa)
四、面向对象3大特征说明
五、继承
1、语法格式
class AA:def __init__(self,a, b):self.A = aself.__B = bdef Aa(self):print("你好吗?")class BB(AA): # 继承于AA类,默认拥有父类所有元素(不包括构造方法,私有属性和方法)passBa = BB(100,200)
Ba.Aa() # 调用父类Aa()方法
print(Ba.A) # 调用父类共有的属性
print(Ba.B) # 调用父类私有的属性(报错,无法调用)
六、类成员的继承和重写
class AA:def __init__(self, a, b):self.A = aself.__B = bdef aisatsu(self):print("你好,我叫{0}".format(self.A))def nenrei(self):print("我今年{0}岁了".format(self.__B))class BB(AA):def __init__(self, a, b, c):AA.__init__(self,a,b) # 使用父类构造方法,并将自己参数传入父类的构造方法内self.C = cdef aisatsu(self): # 重写父类 aisatsu 方法print("大家好!我叫{0}".format(self.A))A = BB("小明", 16, 20)
A.aisatsu()
A.nenrei()
七、object根类
class AA:pass
class Aa(AA):pass
class Ab(Aa):pass
class BB(Ab):passprint(BB.mro()) # m属性 mro() 或者 __mro__ 可以输出这个类的继承层次
1、dir()查看对象属性
class AA:def __init__(self, a, b):self.A = aself.B = bdef aa(self):print("aa")class BB(AA):def __init__(self,z):self.Z = zdef bb(self):print("bb")Bb = BB("123")
print(dir(BB))
obj = object()
print(dir(obj))
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb']
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']Process finished with exit code 0
八、str()方法
class AA:def __init__(self,a):self.A = aclass BB:def __init__(self,b):self.B = bdef __str__(self):return "__str__方法用作于对对象的描述信息,可重写"A = AA(1)
print(A) # 没有__str__方法的对象
B = BB(1)
print(B) # 有__str__方法的对象
九、多重继承
十、super()方法获取父类定义
class AA:def Aa(self):print("A:",self)class BB(AA):def Bb(self):print("B:",self)super().Aa() # 输出父类的定义BB().Bb()
十一、多态
class AA:def xr(self):print("形容词")class Aa(AA): # 继承AAdef xr(self): # 重写print("大")
class aa(AA): # 继承AAdef xr(self): # 重写print("小")
class aA(AA): # 继承AAdef xr(self): # 重写print("多")da = Aa()
xiao = aa()
duo = aA()da.xr()
xiao.xr()
duo.xr()
十二、特殊方法和运算符重载
class AA:def __init__(self,a):self.A = adef __add__(self, other): # 重写__add__()if isinstance(other, AA):print("{0}——{1}".format(self.A, other.A))else:print("类对象不相同无法相加!")class Ab:def __init__(self,a):self.B = aaA = AA("大") # aA 和 aa 对象归属于同一个类(AA)
aa = AA("小") # aA 和 aa 对象归属于同一个类(AA)
bB = Ab("多") # bB对象归属于Ab类aA + aa # 进行加法运算
# aA.__add__(aa) 等同于上面
aA + bB # 不同类的对象进行加法运算
1、特殊属性
十三、组合
class AA:def kiku(self):print("好像听到有什么动静")class BB:def __init__(self, a):self.A = aB = BB(AA()) # 将实例化对象给到BB类的A属性内
B.A.kiku() # B.A:调用BB类下的构造方法里的A属性(AA的实例化对象)。 A.kiku() 通过实例化对象调用AA类下的kiku方法
十四、设计模式
1、工厂模式
class AA:def namae(self, a):if a == "张三":return zhangsan() # 返回对应的类elif a == "李四":return lisi() # 返回对应的类elif a == "王五":return wangwu() # 返回对应的类else:print("名字不匹配!")class zhangsan():def __init__(self):print("你好")class lisi():def __init__(self):print("大家好")class wangwu():def __init__(self):print("哈啰")A = AA()
A.namae("张三")
A.namae("老张")
2、单例模式
class AA:__A = None__B = Truedef __new__(cls, *args, **kwargs): # 重写__new__方法if cls.__A == None: # 如果为空值则允许将变量给到__A变量里cls.__A = object.__new__(cls) # 将新对象赋值给__A变量里return cls.__A # 返回__A变量(对象)def __init__(self, a):if self.__B: # 如果__B等于真,就允许执行构造方法会的内容print("123")self.A = aself.__B = FalseA = AA(1) # 每次新生成对象时会执行__new__方法,每次实例化对象时都会执行__init__方法
B = AA(1) # 每次新生成对象时会执行__new__方法,每次实例化对象时都会执行__init__方法
print(A)
print(B)
Python学习第八节相关推荐
- pygame是python的一个库吗,python学习pygame,,基本库导入impor
python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...
- python科学计数法转换_对比Python学习Go 基本数据结构
公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...
- python学习------tab补全
python学习------tab补全 python也可以进行tab键补全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/env ...
- Python学习day5作业-ATM和购物商城
Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...
- Python学习系列(六)(模块)
Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...
- 最新Python学习项目Top10!
作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...
- 200页!分享珍藏很久的Python学习知识手册(附链接)
这是之前入门学习Python时候的学习资料,非常全面,从Python基础.到web开发.数据分析.机器学习.深度学习.金融量化统统都有,该手册是HTML版本,左侧是目录,可以点击,右侧是对目录知识点的 ...
- Python学习系列(五)(文件操作及其字典)
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...
- Python学习01 Hello World
Python学习之Hello World 准备工作 去官网http://www.python.org/ 下载python的安装包: http://www.python.org/download/ 当前 ...
最新文章
- linux svn 使用
- C语言实现encode和decode
- jquery 如何保存拖动空间的位置
- Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手
- Apache Lucene 5.0.0即将发布!
- 输入一个正整数求所有素数因子_一个数如果恰好等于它的因子之和,这个数就称为完数。编写应用程序求1000以内所有的完数...
- 如何合并多个(.txt或其他)文件到一个文件
- (77)Verilog HDL测试激励:复位激励3
- Spring源码学习笔记:经典设计模式之装饰者模式
- 理顺8个版本vue的区别
- Flowable官方指定中国社区成立了
- 计算机视觉的终极目标
- calfcamel 的 2333
- revit里的BIM模型转fbx真的可以带纹理材质吗?
- 由access key泄露浅谈云安全
- wt概述-c++ web
- SetFocus()的用法
- 计算机网络8832,3C8832路由器中DDN中的应用设置
- badger mremap size mismatch数据库异常
- 你这么努力转型,就为了证明失败?——数字化陷阱系列报道(1)