zoukankan      html  css  js  c++  java
  • 面向对象进阶

    今日内容:

      1、__slots__魔法

      2、静态方法和类方法

      3、继承

      4、嵌套函数

      5、装饰器

    ---------------------------------------------------------------------------------------------------------------------

    1、__slots__魔法

             Python是一门动态语言(如下所示:),通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。如果限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。

    2、静态方法和类方法

    静态方法和类方法都是通过给类发消息来调用的

      1)静态方法:如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod

    案例一:

      #  三个函数求正方形的面积

    ---------------------------------------------------------------------------------------------------------------------------------

    class Name(object):
      def __init__(self,a,b,c,d):  # 定义四条边
        self.a = a
        self.b = b
        self.c = c
        self.d = d
      @staticmethod
      def is_valid(a,b,c,d):
        for i in [b,c,d]:
          if i !=a:     # if判断四条边是否相等
            return False
        else:
          return True
      def area(self):
        if res == True:
          area_ = self.a * self.b   #求正方形面积
            return area_
    def main():
      name = Name(2,2,2,2)
      res = name.is_valid(2,2,2,2)
      if res == True:
        print(name.area())
    main()

    ---------------------------------------------------------------------------------------------------------------------------------

    2)类方法:在类方法中的第一个参数约定名为cls,它代表的是当前类相关的信息的对象

    案例二:

      """数字时钟"""

      # @classmethod:获取自身类(cls)中的属性,并且可以更改.
      # classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等

    ---------------------------------------------------------------------------------------------------------------------------------

    from time import time, localtime, sleep

    class Clock(object):

      def __init__(self, hour=0, minute=0, second=0):
        self._hour = hour
        self._minute = minute
        self._second = second

      @classmethod
      def now(cls):
        ctime = localtime(time())
        return cls(ctime.tm_hour, ctime.tm_min, ctime.tm_sec)

      def run(self):   """走字"""
      self._second += 1
      if self._second == 60:
        self._second = 0
        self._minute += 1
        if self._minute == 60:
          self._minute = 0
          self._hour += 1
          if self._hour == 24:
            self._hour = 0

      def show(self):   """显示时间"""
        return '%02d:%02d:%02d' %
          (self._hour, self._minute, self._second)


    def main():    # 通过类方法创建对象并获取系统时间


      clock = Clock.now()
      while True:
        print(clock.show())
        sleep(1)
        clock.run()


    if __name__ == '__main__':
      main()

    ---------------------------------------------------------------------------------------------------------------------

    3、继承

    用子类对象去替换掉一个父类对象,示例如下:

    案例三:

    ---------------------------------------------------------------------------------------------------------------------

    class A(object):
      def __init__(self,a1):
        self.a = 1000
        self.a1 = a1
      def sum(self):
        sum_ = self.a+self.a1
        return sum_
    class B(A):
      def __init__(self,a1,b1):
        self.b1 =b1
        A.__init__(self,a1)
      def Print(self):
        res =self.sum()
        print(res)
    def main():
      b=B(100,'111')
      b.Print()
    main()

    ---------------------------------------------------------------------------------------------------------------------

    4、嵌套函数

    python允许创建嵌套函数,也就是说可以在函数里面定义函数。示例如下:

    例1:

    例2:

    5、装饰器

    python装饰器就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。示例如下:

    例1:

    --------------------------------------------------------------------------------------------------------------------

    '''
    定义了一个函数deco,函数无参
    '''
    def deco(func):
      print("HELLO1")
      def warp():
        return func()
      return warp

    @deco
    def Joker():
      print('hello')

    Joker()

    --------------------------------------------------------------------------------------------------------------------

    例2:

    --------------------------------------------------------------------------------------------------------------------

    '''
    定义了一个函数deco,函数有参
    '''
    def deco(func):
      def warp(H):
        print("Joker")
        return func(H)
      return warp

    @deco
    def Joker(name):
      print('hello %s'%name)

    Joker('huwang')

    ------------------------------------------------------------------------------------------------------------------

  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/honey-2019/p/11323450.html
Copyright © 2011-2022 走看看