Python类与对象

2023-10-26

目录

1. 语法

1.1. 定义类

1.2. 调用类

1.3. 方法

2. 封装

2.1. 属性

2.2. 类与方法的相互调用

2.3. 私有方法

3. 继承

3.1. 单继承

3.2. 多继承

3.3. 连续继承

3.4. 调用父类同名方法

3.5. 查看继承关系

4. 多态

5. 装饰器

5.1. 类方法 @classmethod

5.2. 静态方法 @staticmethod

5.3. 类方法与静态方法的区别

6. 特殊方法

if __name__ = '__main__' 阻止自动调用

__init__ 定义实例属性

__str__ 定义类的返回值

__del__ 回收内存

__len__ 返回对象的长度

__getattr__ 自定义属性调用


1. 语法

1.1. 定义类

class 类名(object):
    代码块
    ......
  • class:必须的关键字
  • 类名:自定义名称,遵循标准驼峰写法( 例如:Graphic report ---> GraphicReport)
  • 括号:python3表示继承某个类
  • object:超类,继承所有

python2的中经典类

class MyClass:
    代码块

python3的新式类

class MyClass(object):
    代码块

class MyClass():    #继承为空,默认为object
    代码块

1.2. 调用类

实例化对象调用

>>> class MyClass(object):
        def func1(self):
            print('这是类中定义的一个方法')

#将对象实例化后,调用该类中的方法
>>> m = MyClass()
>>> m.func1()
这是类中定义的一个方法

#也可以直接调用
>>> MyClass().func1()
这是类中定义的一个方法

1.3. 方法

实例方法

class MyClass(object):
    #定义一个实例方法
    def func(self):
        代码块
  • func:封装的一个实例方法(自定义方法名)
  • self:表示类的实例对象

类方法

class MyClass(object):
    #定义一个类方法
    @classmethod
    def func(cls):
        代码块

方法上一层加入了 @classmethod,表示定义一个类方法

  • func:封装的一个类方法(自定义方法名)
  • cls:表示类的本身

静态方法

class MyClass(object):
    #定义一个静态方法
    @staticmethod
    def func:
        代码块

方法上一层加入了 @staticmethod,表示定义一个静态方法。而静态方法不需要传入形参,并且独立,与类中其他方法无法互相调用。

  • func:封装的一个静态方法(自定义方法名)

2. 封装

2.1. 属性

共有类属性,私有类属性,实例属性

>>> class MyClass(object):
        a = 1   #共有类属性
        __b = 2 #私有类属性(以双下划线开头)
    
        def __init__(self):
            self.c = 3  #实例属性(必须以self开头)
        
        def func1(self):
            #调用属性必须以self开头,不论共有还是私有
            print(self.a)
            print(self.__b)
            print(self.c)

>>> m = MyClass()
>>> m.func1()
1
2
3

#外面只能调用共有类属性或实例属性,不能调用私有属性
>>> print(m.a)
1
>>> print(m.b)
AttributeError: 'MyClass' object has no attribute 'b'
>>> print(m.c)
3

类属性与实例属性名相同,默认使用实例属性

>>> class MyClass(object):
        a = 1

        def __init__(self):
            self.a = 2    #优先

        def func1(self):
            print(self.a)

>>> MyClass().func1()
2

调用自己方法中的变量,不使用self开头

>>> class MyClass(object):
        def __init__(self):
            self.a = 1

        def func1(self):
            a = 2
            print(self.a)    #调用init中的属性
            print(a)         #调用自己定义的属性

>>> MyClass().func1()
1
2

类外面增加属性

>>> class MyClass(object):
        def func1(self):
            print(self.b)

>>> m = MyClass()
>>> m.b = 2
>>> m.func1()
2

类外面修改属性

>>> class MyClass(object):
        def __init__(self):
            self.a = 1

        def func1(self):
            print(self.a)    #本身self.a为1,但是修改之后变成了2

>>> m = MyClass()
>>> m.a = 2
>>> m.func1()
2

类外面删除属性

>>> class MyClass(object):
        def __init__(self):
            self.a = 1

        def func1(self):
            print(self.a)

>>> m = MyClass()
>>> del m.a     #删除属性
>>> m.func1()
AttributeError: 'MyClass' object has no attribute 'a'

2.2. 类与方法的相互调用

类之间的相互调用

>>> class A(object):
        def func1(self):
            print('A类')

>>> class B(object):
        A().func1()    #调用其他类中的方法,需要实例化

>>> B()
A类

方法之间的相互调用

>>> class MyClass(object):
        def func1(self):
            print('第1个函数')

        def func2(self):
            self.func1()    #调用同一个类中的函数,以self开头

>>> MyClass().func2()
第1个函数

2.3. 私有方法

定义一个私有方法,以双下划线开头。私有方法只能在内部使用,外部无法调用

>>> class MyClass(object):
        def __func1(self):
            print('这是一个私有方法')

        def func2(self):
            print('这是一个普通方法')
            self.__func1()        #内部调用这个私有方法

>>> MyClass().func1()    #外部无法调用私有方法
AttributeError: 'MyClass' object has no attribute 'func1'. Did you mean: 'func2'?

>>> MyClass().func2()    #可以通过内部去调用
这是一个普通方法
这是一个私有方法

3. 继承

3.1. 单继承

继承父类的全部方法和属性

>>> class A(object):
        a = 1
        def func1(self):
            print('A类')

>>> class B(A):     #继承父类A中的全部方法和属性
        def func2(self):
            print(f'A中的变量 a = {self.a}')

>>> B().func1()
>>> B().func2()
A类
A中的变量 a = 1

子类重写

如果子类与父类的方法名、属性名相同,调用子类时默认使用子类的方法、属性

>>> class A(object):
        a = 1
        def func1(self):
            print('A类')

>>> class B(A):
        a = 2
        def func1(self):
            print(self.a)   #使用当前类的属性

>>> B().func1()    #调用子类的方法
2

3.2. 多继承

继承多个类属性名或方法名相同时,默认使用继承的第一个父类

>>> class A(object):
        a = 1

>>> class B(object):
        a = 2

>>> class C(A, B):    #先继承A,后继承B
        def func1(self):
            print(self.a)    #默认调用A的属性

>>> C().func1()
1

3.3. 连续继承

最小类可以继承上层全部关系的属性、方法

>>> class A(object):
        def func1(self):
            print('A类')

>>> class B(A):
        def func2(self):
            print('B类')

>>> class C(B):
        pass

>>> C().func1()
>>> C().func2()
A类
B类

3.4. 调用父类同名方法

当子类与父类同名,实例化对象调用时默认子类

>>> class A(object):
        def func(self):
            print('A类')

>>> class B(A):
        def func(self):
            print('B类')

>>> class C(B):
        def func(self):    #优先使用本身的方法
            print('C类')

>>> C().func()
C类

super 函数调用上一个父类,不需要指定类名。缺点就是只能调用自己的上一级

>>> class A(object):
        def func(self):
            print('A类')

>>> class B(A):
        def func(self):
            print('B类')

>>> class C(B):
        def func(self):
            super().func()    #调用上一级类方法,不需要指定类名

>>> C().func()
B类

指定类名调用同名方法

>>> class A(object):
        def func(self):
            print('A类')

>>> class B(A):
        def func(self):
            print('B类')

>>> class C(B):
        def func(self):
            B.func(self)    #指定B类(需要参数self)
            A.func(self)    #指定A类(需要参数self)

>>> C().func()
B类
A类

3.5. 查看继承关系

使用 __mro__ 查看继承关系

class A(object):
    def func1(self):
        print('A类')

class B(A):
    def func2(self):
        print('B类')

class C(B):
    pass

print(C.__mro__)    # 查看C类的继承关系

  • 从左往右表示:C继承B,B继承A,A继承object

4. 多态

多态就是利用继承的方法去实现各种灵活性的调用,举例:

>>> class A(object):
        """这是一个程序"""
        name = '[百度]'

>>> class B(A):
        """这是一个子进程,继承父类公共方法、属性"""
        def Func(self):
            print(f'{self.name}程序开启搜索引擎')

>>> class C(A):
        """这是一个子进程,继承父类公共方法、属性"""
        def Func(self):
            print(f'{self.name}程序返回结果')

>>> class CallingProgram(object):
        """调用程序的各个子进程"""
        def Call_Func(self, var):
            var.Func()    #去调用指定类中的方法,调用的方法同名

>>> b = B()
>>> c = C()
>>> cp = CallingProgram()

>>> cp.Call_Func(b)
>>> cp.Call_Func(c)
[百度]程序开启搜索引擎
[百度]程序返回结果

5. 装饰器

5.1. 类方法 @classmethod

  • 用 classmethod 来声明一个类方法,适用于在不需要实例化对象的情况下提供类级别的操作(比如:创建实例、返回类的状态、更改类的状态等)。
  • 类方法是与类绑定的一种方法,而不是与对象实例绑定的方法。
  • 类方法可以访问类的数据属性和其他类方法,但不能访问实例的数据属性和实例方法。

类中定义了一个实例方法和一个类方法,看一下两者之间的调用区别

>>> class MyClass(object):
        def func1(self):
            print('实例方法')

        @classmethod
        def func2(cls):
            print('类方法')

#调用实例方法,需要实例化
>>> m = MyClass()
>>> m.func1()
实例方法

#调用类方法,不需要实例化
>>> MyClass.func2()
类方法

为什么调用类方法不需要实例化?

  • 因为声明的类方法就是类的本身,形参 cls 就相当于类名,所以本身调用本身不需要实例化。实例化是用来调用实例方法的

类方法使用类属性时,以 cls 方式调用

>>> class MyClass(object):
        a = 1

        @classmethod
        def func(cls):
            print(f'公共类属性a为{cls.a}')

>>> MyClass.func()
公共类属性a为1

类方法无法调用实例属性,仅适用于类级别上的操作。

>>> class MyClass(object):
        def __init__(self):
            self.a = 1

        @classmethod
        def func(cls):
            print(f'实例属性a为{cls.a}')

>>> MyClass.func()
AttributeError: type object 'MyClass' has no attribute 'a'

记录实例使用的次数

>>> class MyClass(object):
        class_count = 0

        def __init__(self):
            MyClass.class_count += 1

        def func1(self):
            print('func1...')

        def func2(self):
            print('func2...')

        @classmethod
        def func3(cls):
            print(f'计数器的值:{cls.class_count}')
            return cls.class_count

>>> MyClass().func1()
>>> MyClass().func2()
>>> MyClass().func3()
>>> MyClass().func3()
func1...
func2...
计数器的值:3
计数器的值:4

需要注意的是,实例化对象后,使用该变量调用并不会增加计数器

>>> m = MyClass()    #实例化n个对象,计数器 +n
>>> m.func3()
>>> m.func3()
计数器的值:1
计数器的值:1

5.2. 静态方法 @staticmethod

  • 静态方法既不需要传递类对象,也不需要传递实例对象(没有形参)。静态方法可以独立于类的任何实例或类级别而存在,因此它们是最为模块化、灵活和可维护的方法类型之一。

静态方法的特点

  1. 静态方法不能访问类的变量,因为它不会接收任何与类相关的参数。也就是说,它不能依赖于类的状态或实例,并且它应该是没有副作用的。
  2. 与其他类型的方法相比,静态方法不需要特殊的参数,但仍然可以使用默认参数。
  3. 静态方法往往更容易维护和测试,因为它们不会改变且不依赖于类的状态。
  4. 由于静态方法可以独立于类而存在,它们也可以很方便地跨越模块、包和应用程序。

静态方法的调用(不需要实例化对象)

>>> class MyClass():
        @staticmethod
        def func(n):
            print(n)
>>> MyClass.func(1)
1

静态方法本身独立,属性也独立

无法调用实例属性
>>> class MyClass(object):
        def __init__(self):
            self.a = 1

        @staticmethod
        def func():
            print(f'实例属性a为{a}')

>>> MyClass.func()
NameError: name 'a' is not defined
无法调用实例方法
>>> class MyClass(object):
        def func1(self):
            print('实例方法')

        @staticmethod
        def func2():
            func1()     #调用func1
            MyClass().func1()    #即使通过类也无法调用

>>> MyClass.func()
AttributeError: type object 'MyClass' has no attribute 'func'. Did you mean: 'func1'?
实例方法也无法调用静态方法
>>> class MyClass(object):
        @staticmethod
        def func1():
            print('静态方法')

        def func2(self):
            self.func1()

>>> MyClass().fun2()
AttributeError: 'MyClass' object has no attribute 'fun2'. Did you mean: 'func2'?
静态方法无法继承
>>> class A(object):
        @staticmethod
        def func1():
            print('静态方法')

>>> class B(A):
        def func2(self):
            self.func1()    #调用父类中的静态方法

>>> B().fun2()
AttributeError: 'B' object has no attribute 'fun2'. Did you mean: 'func2'?

5.3. 类方法与静态方法的区别

参数

  • 类方法第一个参数默认 cls 代表类的本身,非实例本身。
  • 静态方法不需要额外的形参,可以把它当成一个独立函数。

访问类属性

  • 类方法可以访问类中的其他属性。
  • 静态方法不可以访问类中的其他属性。

继承

  • 类方法可以被继承和重写。
  • 静态方法无法被继承。

用途

  • 类方法通常用于操作与类有关的属性和方法,适用于通用代码。
  • 静态方法通常用于实现可维护性高的代码,适用于独立和复用的代码块。

6. 特殊方法

if __name__ = '__main__' 阻止自动调用

  • __name__是Python中的一个内置变量,表示模块名或程序名。
  • 当执行一个模块时,Python会自动将该模块的__name__设置为字符串"__main__"。因此,当我们在一个模块中使用if __name__ == "__main__":语句时,表示只有在该模块直接被执行时,该语句才会成立。

举个例子,分别在2个文件中写入以下代码

"""文件a"""
class MyClass(object):
    def func1(self):
        print('func1...')

MyClass().func1()
"""文件b"""
import a
print('func2...')

 文件b导入文件a模块,执行文件b

func1...
func2...
  • 文件a中的模块被自动调用了(输出func1...)

使用 if __name__ == '__main__': 方法

"""文件a"""
class MyClass(object):
    def func1(self):
        print('func1...')

if __name__ == '__main__':
    MyClass().func1()
"""文件b"""
import a
print('func2...')

文件b导入文件a模块,执行文件b

func2...
  • 文件a中的模块被无法被自动调用,仅输出func2...

__init__ 定义实例属性

>>> class MyClass(object):
        def __init__(self):
            self.a = 1

init 可以定义属性,类也可以定义属性,那么问题来了,init 存在的作用是啥呢?

可以发现公共类属性无法通过传参的方式动态定义属性

class MyClass(object):
    a = 1

MyClass()

但使用 init 就很好地解决了这一问题

>>> class MyClass(object):
        def __init__(self, a, b):
            self.a = a
            self.b = b

        def func1(self):
            print(f'a的值为{self.a}, b的值为{self.b}')

>>> m = MyClass(1, 2)
>>> m.func1()
a的值为1, b的值为2

        当然了,封装的方法也可以传参,不过传入的参数独立使用的属性,其他方法无法使用。而 init 传入的参数是公共方法,所以这个方法根据实际情况使用就好。

__str__ 定义类的返回值

这个方法的作用是什么呢?先来看看打印类的结果

>>> class MyClass(object):
        pass

>>> print(MyClass())
<__main__.MyClass object at 0x0000014E6FC82EC0>

直接打印类,返回了一个内存地址(其实这是默认的返回值)。如果我们不需要内存地址,而想让它返回这个类的作用,那么定义一个 __str__ 即可

>>> class MyClass(object):
        def __str__(self):
            return "这个类是一个示例"

>>> print(MyClass())
这个类是一个示例

__del__ 回收内存

  • __del__ 函数在删除实例时调用,回收内存(Python自动调用)

看一个简单例子

>>> class MyClass(object):
        def func1(self):
           print('执行程序A')

        def __del__(self):
            print('程序执行完毕,回收内存!')

>>> MyClass().func1()
执行程序A
程序执行完毕,回收内存!

封装的方法 func1 执行完了以后才会调用del函数,如果类外面还有其他程序又会怎么样呢?

>>> class MyClass(object):
        def func1(self):
           print('执行程序A')

        def __del__(self):
            print('程序执行完毕,回收内存!')

>>> MyClass().func1()
>>> print('执行程序B')
执行程序A
程序执行完毕,回收内存!
执行程序B
  • 可以看到 MyClass 执行完之后就立即回收了内存

如果将实例化对象赋值呢?

>>> class MyClass(object):
        def func1(self):
           print('执行程序A')

        def __del__(self):
            print('程序执行完毕,回收内存!')

>>> m = MyClass()
>>> m.func1()
>>> print('执行程序B')
执行程序A
执行程序B
程序执行完毕,回收内存!
  • 可以发现赋值后调用 MyClass,执行完func1之后并没有回收内存,而是直接去执行了下面的 "程序B",再回收内存。说明此时 MyClass 执行完并没有直接回收。

我们试试 del 呢

>>> class MyClass(object):
        def func1(self):
           print('执行程序A')

        def __del__(self):
            print('程序执行完毕,回收内存!')

>>> m = MyClass()
>>> m.func1()
>>> del m
>>> print('执行程序B')
执行程序A
程序执行完毕,回收内存!
执行程序B
  • 手动删除了MyClass 后自动回收该类的内存。

Python采用自动引用计数实现垃圾回收机制。

  • 每一个Python对象配置了一个计数器,初始值为0,当变量引用该实例对象,计数器 +1;当一个变量取消对该实例对象的引用,则计数器 -1。
  • 如果Python对象的计数器值为0,则表明没有变量引用该Python对象,即程序不再需要它,此时Python将自动调用__del__()方法将其回收。

需要注意的是:

        del [对象] 并不会主动调用 __del__ 方法,只有引用计数为 0 时,__del__()才会被执行,并且定义了__del_() 的实例无法被 Python 循环垃圾收集器收集,所以尽量不要自定义__del__()。一般情况下,__del__() 不会破坏垃圾处理器。

__len__ 返回对象的长度

通常用于计算容器类型对象的元素数量。

>>> class MyClass(object):
        def __init__(self, num):
            self.num = num

        def __len__(self):
            return len(self.num)

>>> mc = MyClass([1, 2, 3])
>>> print(len(mc))
3


__getattr__ 自定义属性调用

当调用一个不存在的属性时,会调用该方法。可以自定义该方法以实现动态属性调用。

>>> class MyClass:
        def __init__(self, name):
            self.name = name

        def __getattr__(self, attr):
            if attr == "age":
                return 18
            else:
                raise AttributeError(f"类 '{self.__class__.__name__}' 中没有属性 '{attr}'")

>>> mc = MyClass("小李")
>>> print(mc.name)
>>> print(mc.age)
>>> print(mc.gender)
小李
18
AttributeError: 类 'MyClass' 中没有属性 'gender'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python类与对象 的相关文章

  • httplib.BadStatusLine: '' 在 Linux 上,但在 Mac 上则不然

    这个错误已经困扰我几个小时了 我决定编写一个单独的项目 只是为了看看我是否可以复制它 而且我可以 但只能在我的服务器上复制 这适用于我的 Mac Mac OSX El Capitan 10 11 6 服务器 CentOS 7 2 1511
  • docker-compose:容器之间的 Redis 连接被拒绝

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • python类型中的__flags__有什么用

    我最近阅读了pickle源代码 以下代码在copy reg让我很困惑 HEAPTYPE 1 lt lt 9 def reduce ex self proto assert proto lt 2 for base in self class
  • 为什么最新的 Python 3.8.x 版本不提供 Windows 安装程序?

    我需要在Windows计算机上安装Python 3 8并希望使用最新的小版本3 8 12 https www python org downloads release python 3812 官方发布网页提供了源代码的 tarball 文件
  • matplotlib 的 pcolor 中的白线

    在某些 pdf 查看器 例如 OSX 上的 Preview 中 使用以下命令绘制的图matplotlib的 pcolor 有白线 见下图 我怎样才能摆脱它们 源代码非常简单 选择任何数据x y z import matplotlib mat
  • tkinter 上的“NoneType”对象没有属性“get”错误[重复]

    这个问题在这里已经有答案了 我最近开始使用 python 3 6 进行编码tkinter并尝试创建我自己的项目repl it 该项目是一个简单的交互式待办事项列表 但是我陷入困境并且无法使该功能正常工作 该函数只是简单地获取条目并将其添加到
  • Pyjnius导入jar文件

    Pyjnius 允许您为 java 类创建 python 包装器 例如 Hardware autoclass org myapp Hardware 有没有办法像这样导入现有的 jar 文件 语法是什么样的 您可以将 jar 添加到 CLAS
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • 简单 CAE 的问题

    看起来简单的 CAE 不适用于 Carvana 数据集 我正在尝试对 Carvana 数据集进行简单的 CAE 你可以下载它here https www kaggle com c carvana image masking challeng
  • UTF-8 解码如何知道字节边界?

    我一直在阅读大量有关 unicode 编码的文章 尤其是有关 Python 的文章 我想我现在对此已经有了相当深入的了解 但仍有一个小细节我有点不确定 解码如何知道字节边界 例如 假设我有一个带有两个 unicode 字符的 unicode
  • 桨在移动时留下痕迹(Pygame Pong 游戏)[重复]

    这个问题在这里已经有答案了 我的游戏中的球拍有问题 每次我试图移动它时 桨都会留下一条 痕迹 我想这是因为我的代码没有删除旧位置的前一个桨 如果是的话怎么删除之前的呢 我应该使用blit Code import pygame sys ran
  • Python textwrap.wrap 导致 \n 问题

    所以我只是重新格式化了一堆代码以合并textwrap wrap 却发现我所有的 n都消失了 这是一个例子 from textwrap import wrap def wrapAndPrint msg width 25 wrap msg to
  • Python 宏:用例?

    如果 Python 有一个类似于 Lisp Scheme 的宏工具 比如元Python https code google com p metapython 你会如何使用它 如果您是一名 Lisp Scheme 程序员 您会使用宏来做什么
  • 更改 Windows 上的 virtualenv 文件夹

    计算机修复后 我的 python 项目目录 Windows 发生了变化 比如从 d 到 f 现在我所有的 virtualenv 都坏了 激活 env 后 virtualenv 中的项目无法找到依赖项 并且自定义脚本 来自 env scrip
  • pygame.image.load 不工作

    我正在尝试为游戏创建世界地图 但是当我尝试将世界地图加载到屏幕上时 命令行告诉我无法执行此操作 这是代码 import sys import pygame from pygame locals import pygame init Surf
  • 为什么变量不在循环外更新?

    无法弄清楚为什么结果中的第一个键是 abc 而不是我期望的 c 我使用的是Python 3 6 4 数据结构很奇怪 因为我删除了不相关的键和值 f replace ab r data abc 1 def 2 ghi 3 jkf 4 lmn
  • 如何在Python中一次比较二维数组的2列与另一个数组的列

    我有两个字符串数组 每个数组有三列 我想比较两个二维数组的前两列 有 3 列和 4000 行 如果它们匹配 那么我需要那些匹配的值 但是我的代码不起作用 这是一个示例 array1 1stcolumn 2ndColumn 3rdColumn
  • 按键合并的两个字典的值的并集

    我有两本词典 d1 a x y b k l d2 a m n c p r 如何合并这两个字典以获得这样的结果 d3 a x y m n b k l c p r 当字典的值是简单类型 如 int 或 str 时 这有效 d3 dict i a
  • 在 python 中,VSCode 调试器不会单步执行外部代码。无法弄清楚如何编辑 launch.json 中的“justMyCode”

    我一直在提到https code visualstudio com docs python debugging justmycode https code visualstudio com docs python debugging jus
  • centos上无法安装Pillow

    我上面有 centos 6 3 和 python 2 6 当我尝试通过 easy install 安装它时 出现以下错误 imaging c 76 20 error Python h No such file or directory In

随机推荐

  • sql server 备份还原(相关文章很凌乱)

    1 首先安装Microsoft SQL Server Management Studio 下载 SQL Server Management Studio SSMS SQL Server Management Studio SSMS Micr
  • 反编译--jadx的下载使用与配置

    下载与安装 git clone https github com skylot jadx git cd jadx gradlew dist 找到 jadx gui bat文件双击安装即可
  • 基于综合指标的冬小麦长势无人机遥感监测

    用于描述作物长势的指标 苗情 作物密度 叶面积指数 LAI 生物量 干物质量 光合色素含量 目前有关小麦长势监测的研究 多数是以LAI 叶片叶绿素含量 氮素含量 水分含量 生物量单个指标反映小麦长势 本文尝试将LAI 叶片叶绿素含量 氮素含
  • nvm安装与使用

    一 介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具 方便切换不同版本的Node js 二 使用 nvm 的使用非常的简单 跟 npm 的使用方法类似 2 1 下载安装 首先先下载 n
  • 6.7行为型---中介者模式

    在现实生活中 常常会出现好多对象之间存在复杂的交互关系 这种交互关系常常是 网状结构 它要求每个对象都必须知道它需要交互的对象 例如 每个人必须记住他 她 所有朋友的电话 而且 朋友中如果有人的电话修改了 他 她 必须告诉其他所有的朋友修改
  • float和double的范围和精度

    float与double的范围和精度 1 范围 float和double的范围是由指数的位数来决定的 float的指数位有8位 而double的指数位有11位 分布如下 float 1bit 符号位 8bits 指数位 23bits 尾数位
  • MySQL --- 常用函数 - 字符串函数

    函数 MySQL 函数会对传递进来的参数进行处理 并返回一个处理结果 也就是返回一个值 MySQL 包含了大量并且丰富的函数 咱们讲解几十个常用的 剩下的比较罕见的函数我们可以到 MySQL 参考手册 查询 字符串函数 函数 作用 UPPE
  • STM32 Keil:warning: #223-D: function "LED_Init" declared implicitly

    include stm32f10x h include led h int main LED Init while 1 GPIO SetBits GPIOD GPIO Pin 6 运行时警告 warning 223 D function L
  • 【Android】dumpsys activity package $packagename

    具体作用后续跟进检讨补全
  • 线性代数的本质(一)

    文章目录 向量空间 向量及其性质 基与维数 向量的坐标运算 线性代数的本质 3blue1brown 高中数学A版选修4 2 矩阵与变换 线性代数及其应用 第五版 高等代数简明教程 蓝以中 向量空间 In the beginning Gran
  • 机器学习第五课--广告点击率预测项目以及特征选择的介绍

    这个项目的主要的目的是通过给定的广告信息和用户信息来预测一个广告被点击与否 如果广告有很大概率被点击就展示广告 如果概率低 就不展示 因为如果广告没有被点击 对双方 广告主 平台 来讲都没有好处 所以预测这个概率非常重要 也是此项目的目标
  • Description Resource Path Location Type Java compiler level does not match the version of the instal

    解决办法 在项目上右键Properties Project Facets 在打开的Project Facets页面中的Java下拉列表中 选择相应版本 有可能是java1 6 改成java6之类的
  • 【Python】平面多边形Wachspress坐标、中值坐标的计算及其等高线

    平面多边形Wachspress坐标 中值坐标的计算及其等高线 代码仅供参考 复杂度极高 暂时无优化 1 Wachspress坐标等高线绘制 1 1 程序 计算有向面积 def dir acr point1 point2 point3 res
  • Unity3d——ParticleSystem粒子光环

    记录一下学习的过程 首先是Inspector视窗中Particle System的属性 可以通过修改属性来改变粒子的效果 基本属性 Duration 发射器发送粒子持续的时间 比如设置为5 就是5秒后不再发送新的粒子 Looping 循环发
  • 1140: 小数点后第n位 多实例java

    import java util Scanner public class oj1 public static void main String args Scanner input new Scanner System in int t
  • 利用OpenGL设计贪吃蛇游戏

    利用OpenGL设计贪吃蛇游戏 文章目录 利用OpenGL设计贪吃蛇游戏 任务介绍 游戏玩法 开发环境 游戏实现 贪吃蛇游戏的框架搭建 主程序 游戏类 游戏对象类 工具类 着色器类 摄像机类 精灵渲染类 场景 蛇 食物的渲染 场景 蛇 食物
  • Windows 下将Python项目打包为.exe可执行文件

    Pycharm 打包为 exe 可执行文件 01 安装 PyInstaller 模块 02 打包文件 01 安装 PyInstaller 模块 Python 项目编写完成后 可以将其打包成一个 exe 可执行文件 这样即使计算机上没有Pyt
  • Android平台RTMP推送或GB28181设备接入端如何实现采集audio音量放大?

    我们在做Android平台RTMP推送和GB28181设备对接的时候 遇到这样的问题 有的设备 麦克风采集出来的audio 音量过高或过低 特别是有些设备 采集到的麦克风声音过低 导致播放端听不清前端采集的audio 这时候 就需要针对采集
  • docker容器打通git

    现在github 是通过access token鉴权登录的 在个人设置页面可以创建自己的token 一定要记得保存下来 页面关闭后就不会再展示了 在docker容器中clone仓库代码 会报识别不出github域名 这个时候ping一下gi
  • Python类与对象

    目录 1 语法 1 1 定义类 1 2 调用类 1 3 方法 2 封装 2 1 属性 2 2 类与方法的相互调用 2 3 私有方法 3 继承 3 1 单继承 3 2 多继承 3 3 连续继承 3 4 调用父类同名方法 3 5 查看继承关系