一、方法的重载

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学习第八节相关推荐

  1. pygame是python的一个库吗,python学习pygame,,基本库导入impor

    python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...

  2. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  3. 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  ...

  4. Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...

  5. Python学习系列(六)(模块)

    Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块. 引入模块的几种方式: ...

  6. 最新Python学习项目Top10!

    作者 | Mybridge 译者 | Linstancy 整理 | Jane 出品 | AI科技大本营 [导读]过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项 ...

  7. 200页!分享珍藏很久的Python学习知识手册(附链接)

    这是之前入门学习Python时候的学习资料,非常全面,从Python基础.到web开发.数据分析.机器学习.深度学习.金融量化统统都有,该手册是HTML版本,左侧是目录,可以点击,右侧是对目录知识点的 ...

  8. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  9. Python学习01 Hello World

    Python学习之Hello World 准备工作 去官网http://www.python.org/ 下载python的安装包: http://www.python.org/download/ 当前 ...

最新文章

  1. linux svn 使用
  2. C语言实现encode和decode
  3. jquery 如何保存拖动空间的位置
  4. Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手
  5. Apache Lucene 5.0.0即将发布!
  6. 输入一个正整数求所有素数因子_一个数如果恰好等于它的因子之和,这个数就称为完数。编写应用程序求1000以内所有的完数...
  7. 如何合并多个(.txt或其他)文件到一个文件
  8. (77)Verilog HDL测试激励:复位激励3
  9. Spring源码学习笔记:经典设计模式之装饰者模式
  10. 理顺8个版本vue的区别
  11. Flowable官方指定中国社区成立了
  12. 计算机视觉的终极目标
  13. calfcamel 的 2333
  14. revit里的BIM模型转fbx真的可以带纹理材质吗?
  15. 由access key泄露浅谈云安全
  16. wt概述-c++ web
  17. SetFocus()的用法
  18. 计算机网络8832,3C8832路由器中DDN中的应用设置
  19. badger mremap size mismatch数据库异常
  20. 你这么努力转型,就为了证明失败?——数字化陷阱系列报道(1)

热门文章

  1. 烧写工具DNW的使用
  2. mac 无法打开22端口 无法远程连接ssh 的解决办法
  3. 在D天内送达包裹的能力
  4. 即时通讯IM 源码 uniapp php 全开源
  5. 自建家庭云手机文件备份系统,你的文件你控制
  6. 使用ardunio制作神秘礼物(环境光传感器、舵机、LED、蜂鸣器)
  7. Linux第二课 文件系统目录结构
  8. tongue twisters
  9. php必应收录查询api,必应 Web 搜索 API v7.0
  10. 必应(bing)搜索跳转到百度解决方法