1.动态方法_代码示例

class Person:def work(self):print("努力上班!")def play_game(self):print("{0}玩游戏".format(self))def work2(s):print("好好工作,努力上班!")Person.play = play_game  # 给类动态增加方法
Person.work = work2   # 给类动态增加方法
p = Person()
p.play()  # 输出:<__main__.Person object at 0x000001A81D68BC48>玩游戏
p.work()  # 输出:好好工作,努力上班!

2.私有属性_代码示例

class Employee:__company = "usn"def __init__(self, name, age):self.name = nameself.__age = age  # 两个下划线开头的属性是私有的(private)def __work(self):  # 私有方法(方法也是一种属性)print(self.__age)  # 私有变量对内是公开的print(self.__company)  # 输出:usnemp = Employee("ski", 15)
print(emp.name)  # 输出:ski
print(emp._Employee__age)  # 输出:15。通过“_类名__私有属性(方法)名”访问私有属性(方法)
print(emp._Employee__company)  # 输出:usn
emp._Employee__work()

3.property_代码示例

class Employee:def __init__(self, name, salary):self.name = nameself.__salary = salary  # 使用@property属性必须私有吗?@property   #相当于 salary 属性的 getter 方法def salary(self):return self.__salary@salary.setterdef salary(self, salary):if 1000 < salary < 8000:  # 提高代码鲁棒性self.__salary = salaryelse:print("请输入1000~8000的薪水")# def salary_getter(self):  # 实现getter和setter代码#     return self.salary_getter()# def salary_setter(self, salary):#     if 1000<salary<8000:#         self.salary = salary#     else:#         print("请输入1000~8000的薪水")emp = Employee('ski', 3000)
# emp.salary_setter(10000)  # 不使用@property时设置salary
emp.salary = 5000  # 使用@property后设置salary
print(emp.salary)  # 输出:5000

4.继承_代码示例

class Person:def __init__(self, name, age):self.name = nameself.__age = age  # 父类私有,子类不能直接使用class Student(Person):  # 子类继承了父类除构造方法之外的所有成员。def __init__(self, name, age, score):Person.__init__(self, name, age)  # 共享父类的资源self.score = scorestu = Student('ski', 13, 60)
print(dir(stu))  # 查看stu的属性,注意方法也是一种属性
print("name:{0}, age:{1}, score:{2}".format(stu.name, stu._Person__age, stu.score))
# 输出:['_Person__age', '__class__', ···'name', 'score']
# 输出:name:ski, age:13, score:60

5.重写_代码示例

class Person:def __init__(self, name, age):self.name = nameself.__age = agedef introdution(self):  # 被“重写”覆盖的对象print("my name is {0}".format(self.name))class Student(Person):def __init__(self, name, age, score):Person.__init__(self, name, age)self.score = scoredef introdution(self):  # 与父类同名效果等同于“重写”了父类print("my name is {0}, i am {1}".format(self.name, self._Person__age))stu = Student('ski', 18, 60)
stu.introdution()
print(Student.mro()) # 者类的方法或(属性__mro__)可以输出这个类的继承层次结构。
#输出:[<class '__main__.Student'>, <class '__main__.Person'>, <class 'object'>]

6.super_代码示例

class Person:def introduction(self):print("i am person class")class Student(Person):def introduction(self):# Person.introduction(self)  # 调用父类的 introduction()方法,要传self??super().introduction()  # 通过 super()调用父类的方法,不用传self??print("i am student class")Student().introduction() # 输出:i am person class  i am student class

7.多态_代码示例

class Man:  # 多态(polymorphism)是指同一个方法调用由于对象不同可能会产生不同的行为。def eat(self):print("饿了么?")
class Chinese(Man):def eat(self):print("用筷子吃饭")
class English(Man):def eat(self):print("用刀叉吃饭")def man_eat(m):   # 多态是方法的多态,属性没有多态if isinstance(m, Man): #传入的对象不同,执行的方法也不同。m.eat()else:print("不能吃饭")
man_eat(Chinese())  # 输出: 用筷子吃饭
man_eat(English())  # 输出: 用刀叉吃饭

8.符号重载_代码示例

class Person:  # 测试运算符的重载def __init__(self, name):self.name = namedef __add__(self, other):  # 重写了 + 号方法。if isinstance(other, Person):  # other表示类型return "{0}-{1}".format(self.name, other.name)else:return "非同类对象,不能相乘"def __mul__(self, other):  # 重写了 * 号方法if isinstance(other, int):return other*self.nameelse:return "不是同类不能相乘"p = Person("blu")
p1 = Person("ski")
print(p+p1)  # 输出:blu-ski
print(p*3)  # 输出:blublublu

9.拷贝_代码示例

import copyclass MobilePhone:def __init__(self, cpu, screen): #类也是对象,也可以作为参数传self.cpu = cpuself.screen = screenclass Cpu:def calculate(self):print("计算数字")print("cpu对象:", self)class Screen:def show(self):print("显示画面")print("screen对象:", self)c1 = Cpu()
s1 = Screen()
m1 = MobilePhone(c1, s1)   # 类作为参数传递
m1.screen.show()
m1.cpu.calculate()m2 = copy.copy(m1)  # 浅拷贝
print(m1, m2)m3 = copy.deepcopy(m1) # 深拷贝
print(m1, m3)

10.组合_代码示例

class MobilePhone:def __init__(self, cpu, screen): # 类也是一种对象,可以作为示例的属性调用self.cpu = cpuself.screen = screenclass Cpu:def calculate(self):print("cpu计算")class Screen:def show(self):print("屏幕显示画面")m = MobilePhone(Cpu(), Screen()) # 通过这种方式组合,可实现功能和继承一样。
m.cpu.calculate()  # 输出:cpu计算
m.screen.show()  # # 输出:屏幕显示画面

11.工厂模式_代码示例

class PhoneFactory:  # 工厂模式def create_phone(self, brand):if brand == "华为":return HW()  # 返回类对象, 这个类没写括号也行??elif brand == "小米":return MI()class HW:print("华为手机造好了")class MI:print("小米手机造好了")factory = PhoneFactory()
factory.create_phone("华为")
factory.create_phone("小米")

12.单例模式_代码示例

class Factory:__obj = None__init_flag = Truedef __new__(cls, *args, **kwargs):if cls.__obj == None:cls.__obj = object.__new__(cls)return cls.__objdef __init__(self, name):if self.__init_flag == True:self.name = nameprint(self.name)self.__init_flag = Falsef1 = Factory("手机厂")  # 输出:手机厂
f2 = Factory("电脑厂")  # 不输出
print(f1, f2)  # 输出:<__main__. at 0x174866A6FC8> ,<__main__.at 0x174866A6FC8>

python基础:动态方法、私有属性、property、继承、重写、super、多态、符号重载、拷贝、组合、工厂模式,单例相关推荐

  1. Python基础day09【面向对象(封装、继承、多态)、重写、私有权限】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day09[面向对象(封装.继承.多态).重写.私有权限] Python基础day ...

  2. Python类中的私有属性和私有方法

    Python类中的私有属性和私有方法 Python是面向对象的语言,在Python里一切皆对象,所以大部分情况下,我们都是通过类的方式来编程. 但是Python中的属性和方法在类的外部默认是可以访问的 ...

  3. Python基础学习-方法

    Python基础学习-方法 方法的重载 方法的动态性 私有属性和私有方法(实现封装) 私有方法 @property装饰器 面向对象的三大特征介绍 继承 语法格式 类成员的继承和重写 查看类的继承层次结 ...

  4. Python零基础速成班-第9讲-Python面向对象编程(上),对象和类、初始化、继承、重写、多态、类方法、组合

    Python零基础速成班-第9讲-Python面向对象编程(上),对象和类.初始化.继承.重写.多态.类方法.组合 学习目标 修饰器 面向对象编程:对象和类.初始化.继承.重写.多态.类方法.组合 课 ...

  5. Python 内置方法和属性应用:反射和单例

    1. 前言 python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict.list.set.min.max.range.sorted等.笔者最近在做项目框架时 ...

  6. Python基础--魔法方法()运算符重载)

    文章目录 Python基础--魔法方法()运算符重载) init方法 str方法 Python基础–魔法方法()运算符重载) init方法 class Cat:def hello(self):prin ...

  7. Python基础——get()方法

    Python基础--get()方法 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值. 语法 dict.get(key, default=None) key – ...

  8. python面向对象中的私有属性和私有化方法

    xx: 公有变量 (公有) _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问 __xx:双前置下划线,避免与子类中的属性命名冲突, ...

  9. Python基础教程:类的property特性

    一.什么是 property特性 property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接使用 # ############### 定义 ############### ...

  10. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...

最新文章

  1. 使用Scala-IDE构建Maven项目
  2. oracle打补丁到11.2.0.3.4
  3. 透过【百度地图API】分析双闭包问题
  4. 【HDU - 1533】Going Home(网络流,二分图最优匹配,KM算法)
  5. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
  6. 【机器学习】交叉验证筛选参数K值和weight
  7. AI赋能红外测温助力精准防控疫情……
  8. 新版微软Edge浏览器:支持安装Chrome扩展
  9. 大数据只做三件事,对用户的理解、对信息的理解、对关系的理解
  10. spring beans 的类型
  11. readyread信号不触发_什么是示波器的触发,意外发现!
  12. Atitit保证架构超前性 前瞻性 目录 第一章 为什么需要修改代码 1 第一节 业务增加功能 1 第二节 增加字段 1 第三节 增加表数据需要查询 修改 1 第四节 类库升级 1 第二章 简单抽象
  13. android webview 视频黑屏,【原创】webview加载flash视频黑屏的解决方法(一把鼻涕一把泪,所谓经验的重要性)...
  14. travis ci java_[转]Travis Ci的最接底气的中文使用教程
  15. 聊天系统服务器端类图,使用Java多线程来实现多人聊天室 附实例代码
  16. shapely包导入问题
  17. android 执行bin文件是什么意思,将可执行文件复制到android中的system / bin
  18. 山海演武传·黄道·第一卷 雏龙惊蛰 第十三章 穷奇长梦(上) 十四 穷奇长梦(下)
  19. 【转】ASC II 完整码表及简介
  20. 怎么使用计算机计算公式,科学计算器的使用方法 科学计算器的使用指导

热门文章

  1. 写给小白看的线程池,还有10道面试题
  2. arcgis添加天地图wmts服务
  3. 第十话-模板方法模式
  4. 如何隐藏Facebook帖子(不删除)
  5. Apache安装教程详解
  6. JIRA简介及基本概念
  7. 登陆百度空间,获得网页返回的cookie
  8. rabbitmq 连接失败pika.exceptions.ProbableAccessDeniedError
  9. Redis的主从同步 - 邱乘屹的个人技术博客
  10. 计蒜客T1249——漂亮的字符串