• day 03 python——面向对象编程进阶


    一、静态方法和类方法

    静态方法

    需要通过修饰器@staticmethod来修饰,静态方法不需要多定义参数,可以通过对象和类来访问。

     1 class PD(object):
     2     def __init__(self,a,b,c,d):
     3         self.a = a
     4         self.b = b
     5         self.c = c
     6         self.d = d
     7     @staticmethod
     8     def is_valid(a,b,c,d):
     9         for i in [b,c,d]:
    10             if i != a:
    11                 return False
    12         else:
    13             return True
    14     def area(self):
    15         if res ==True:
    16             area_ = self.a *self.b
    17             return area_
    18 pd = PD(2,2,2,2)
    19 res = pd.is_valid(2,2,2,2)
    20 if res == True:
    21     print(pd.area())

    总结:静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类实例对象来引用

    类方法

    是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以'cls'作为第一个参数的名字,就最好用'cls'了),能够通过实例对象和类对象去访问。

     1 class A(object):
     2     def __init__(self):
     3         self.joker=100
     4         
     5     @classmethod
     6     def a(cls):
     7         return cls()
     8     
     9 #不需要创建A的实例,可直接用A调用a
    10 joker=A.a()
    11 print(joker)
    12 joker2=A()
    13 print(joker2

    默认值

    1 def say(message, times=1):
    2     print(message * times)
    3 
    4 say('Hello') #默认值是(hello,1)
    5 say('World', 5) #更改后是(world,5)

    总结:你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符(=)来为字符串或参数指定默认值。

    时间戳

    1 from time import time,localtime,sleep
    2 print(localtime(time()))

    二、类与类之间的关系

    继承

    继承指的是类与类之间的关系是一种创建新类的方式,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类,继承又单继承和多继承。

    通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人

    单继承

    例如:

     1 class S(object):
     2     def __init__(self):
     3         self.a = 2
     4         self.b = 4
     5         
     6     def sum(self):
     7         SUM_ = self.a + self.b
     8         return SUM_
     9         
    10         
    11 class L(S):
    12     def __init__(self):
    13         S.__init__(self)
    14     def p(self):
    15         res = self.sum()
    16         print(res)
    17 
    18 z = L()
    19 z.p()

    使test1里的类A导入到text里

    (1)from test1 import A

    (2)import test1

             test1.A()

    为了让test只输出一个结果:if _ _name_ _ = = “_ _main_ _”

    函数闭包

    1 def foo():
    2     def bar():
    3         return "hello"
    4     return bar
    5 
    6 f1=foo()
    7 print(f1())

    列表生成式

    优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000-
    缺点: 占用内存

    a = [x for x in range(1000) if x % 2== 0]

    生成器

    优点: 节约内存空间
    缺点: 计算速度慢,因为要生成

    1 a = (x for x in range(100000000000) if x % 2== 0)
    2 for i in range(100):
    3     print(next(a))

    装饰器

     1 def Joker(func):
     2 
     3def warp(n1,n2,n3):
     4 
     5 ​        num = n1 + n2
     6 
     7return func(0,num,n3)
     8 
     9return warp
    10 
    11 
    12 
    13 #装饰器将前两个数字求和,函数本身第三个参数乘上这个和
    14 
    15 @Joker
    16 
    17 def SUM(num1,num2,num3):
    18 
    19print(num1,num2,num3)
    20 
    21print(num2 * num3)
    22 
    23 
    24 
    25 SUM(10,2,3)

    创建虚拟环境

    1. conda create --name env_name python3.7     创建虚拟环境
    2. conda activate env_name  进入虚拟环境
    3. conda env list  查看虚拟环境
    4. pip freeze  查看当前环境自己安装的包
    5. conda deactivate  退出虚拟环境
    6. conda env remove --name env_name   删除虚拟环境
  • 相关阅读:
    OSG学习笔记0——解决OSG读obj模型问题[转]
    Shell脚本——make命令和Makefile文件【转】
    Makefile教程(绝对经典,所有问题看这一篇足够了)【转】
    cmake 手册详解【转】
    Grafana密码恢复
    nsenter的用法
    ssh “permissions are too open” error
    CoreDns配置以及外部dns使用
    Prometheus监控系统-Alertmanager Silences静默配置
    linux下解决bash: syntax error near unexpected token `(' 的错误
  • 原文地址:https://www.cnblogs.com/hisashi-mitsui/p/11322115.html
Copyright © 2020-2023  润新知