python 中 Class(类)的详细说明,通俗易懂

Class 类

用来描述具有相同的属性和方法对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例

一个人(身高:一米八)要吃饭、喝水、睡觉;
一只老虎(体重:300斤)要奔跑、洗澡、捕猎。

一、名词定义

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法: 类中定义的 函数
  • 类变量: 类变量在整个实例化的对象中是公用的。
    • 一般位置 :类变量定义在类中且在函数体之外。
    • 固有属性由类变量表示。
    • 类变量通常不作为实例变量使用。
    • 对类变量的修改会影响到类的所有实例。
  • 数据成员: 类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 方法重写: 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
  • 实例变量:
    • 一般位置 :在类的 __init__ 声明中。
    • 属性 是用变量来表示的,这种变量就称为实例变量,且一般是自定义属性
  • 局部变量:
    • 一般位置定义在方法中的变量
    • 只作用于当前实例(对象)的类。
    • 一旦函数或方法执行完毕,局部变量就会被销毁。
    • 局部变量与类本身无关,无论是在类的内部还是外部定义的方法中,都可以有局部变量。
  • 继承: 即一个派生类(derived class)继承基类(base class)的属性和方法。继承也允许把一个派生类的对象作为一个基类对象对待。
  • 实例化: 创建一个类的实例,即创建一个类的具体对象。
    • 实例是可以更改、删除原属性的。
  • 对象: 通过类定义的数据结构实例,实例即对象。对象包括两个数据成员(类变量和实例变量)和方法。

二、先睹为快

通俗举例:

#通俗举例:
定义一个人(男性)要吃饭、喝水、睡觉;
现在有个具体的人,他被赋予上述定义,所以他便是男人,会吃饭,会喝水,会睡觉。
#类名:一个人
#属性:男性
#方法:吃饭、喝水、睡觉
#对象:这个具体的人(赋予这个人相同的属性、方法的过程叫“实例化”)
  • __init__ 代码举例(有 __init__ 的后面会写):

    class Calculator:             # Calculator:类名
        name = 'Good calculator'  # name:类变量(固有属性)
        price= 18                 # price:类变量(固有属性)
        def add(self,x, y):       # add():方法
            result=x+y            # result:局部变量
            print(result)
        def minus(self, x, y):    # minus():方法
            result=x-y            # result:局部变量
            print(result)
        def times(self, x, y):    # times():方法
            print(x*y)
        def divide(self, x, y):   # divide():方法
            print(x/y)
    cal1 = Calculator()           # ☆实例化(cal1也有了相同的属性和方法)
    ————————————————————————————————————————————————————————————————————————————————————————————
    >>> cal1.name                 ----->'Good calculator'
    >>> cal1.add(1,2)             ----->3
    >>> cal1.price                ----->18
    >>> cal1.price=25
    >>> cal1.price                ----->25 # 实例的属性可以修改
    

三、详细解释

(1)self

  • 在用 def 定义方法时,第一个参数一定得是 self 。

  • self 代表的是类的实例(对象),本质是代表当前对象的地址,不是类;而 self.class 则指向类。

    请看 VCR :

    class Test:
        def prt(self):
            print(self)
            print(self.__class__)
     
    t = Test()
    t.prt()
    ————————————————————————————————————————————————————————————————————————————————————————————
    #输出结果为(两个 print 的结果):
    <__main__.Test instance at 0x100771878>
    __main__.Test
    
  • self 不是 python 关键字,可以把它换成别的单词,但仍强烈建议使用 self。

(2)方法

  • 在类的内部,使用 def 关键字来定义一个方法。
  • 与一般函数不同,类的方法在定义时必须包含参数 self,且为第一个参数,self 代表的是类的实例。
  • self 不是 python 的关键字,所以可以用别的单词来代替 self 。
    但按照惯例,最好就用 self 。
def add(self,x,y) # add即为方法名,x和y为调用该函数需要输入的参数
    result=x+y
__init__

一种内置的方法,可称之为“构造方法”,初始化(Initialize的缩写)

前后各两个下划线

在实例化时,会自动调用,用来初始化自定义属性

  • __init__ 代码举例(没给出默认自定义属性,实例化时需要手动给出):

    下方代码要注意一点,自定义属性是 hight 这些,不是 hig 这些,hig 只是输入参数。

    class Calculator:             # Calculator:类名
        class_variable = "I am a class variable" # 这是一个类变量(固有属性)  
        name = 'Good calculator'  # name:类变量(固有属性)
        price= 18                 # price:类变量(固有属性)
                                                    #*****************************
        
拉丁超立方抽样是一种分层的蒙特卡洛采样方法,适用于多维空间均匀采样,并适用于样本数较少的情况下使用。其采样思想是将系统的每个因素的设计空间分为n个子空间,然后在每个子空间内随机选取一个值,以此生成一个对应的样本数为n的采样矩阵。采样过程需要遵守两个原则:一是每个子设计空间内的样本点必须被随机选取,二是每个子设计空间内有且仅有一个值被选取。 在Python中,可以使用numpy库来实现拉丁超立方抽样。可以通过定义一个函数来计算分区后各变量区域的上下限,并将结果存储为一个n行2列的向量。同时,还可以通过修改单变量程序来实现多变量分区计算程序,将各变量的范围组成2列m行的矩阵,并得到各变量的区间划分。 以下是一个示例代码片段,用于实现拉丁超立方抽样的计算过程: ```python import numpy as np def partition(lower_limit, upper_limit, number_of_sample): section_variable = np.array([lower_limit, upper_limit]).reshape(-1, 1) coefficient_lower = np.zeros((number_of_sample, 2)) coefficient_upper = np.zeros((number_of_sample, 2)) for i in range(number_of_sample): coefficient_lower[i, 0] = 1 - i / number_of_sample coefficient_lower[i, 1] = i / number_of_sample for i in range(number_of_sample): coefficient_upper[i, 0] = 1 - (i + 1) / number_of_sample coefficient_upper[i, 1] = (i + 1) / number_of_sample partition_lower = coefficient_lower @ section_variable partition_upper = coefficient_upper @ section_variable partition_range = np.hstack((partition_lower, partition_upper)) return partition_range arr = partition(0, 10, 10) print(arr.T) ``` 以上代码示例了如何将0到10的范围分成10个等长区间,并获得每个区间的上下限。 希望以上说明对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [拉丁超立方抽样的Python实现](https://blog.csdn.net/YBKarthus/article/details/117698775)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值