精华内容
下载资源
问答
  • 域——类的变量和对象的变量1:类的变量:由一个类的所有对象(实例)共享使用,只有一个类...因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,同一个类的不同实例,虽然对象的变量有相同的名称,但是...

    域——类的变量和对象的变量

    1:类的变量:由一个类的所有对象(实例)共享使用,只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。我理解为:其实它就是一个类的全局变量,类实例化后的对象都可以调用该变量。

    2:对象的变量: 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。我理解的是:不同的对象调用该变量,其值改变后互不影响,跟C#的语法一样,我还因为不理解第一点纠结了半天 !

    属于类级别的变量,在使用它的时候一定要带上类型名字 比如 MyClass.count

    属于每个对象级别的变量,在调用的时候一定要带上self表明属于当前对象。self.name

    构造方法的使用

    ​ 很多类都倾向于将对象创建为有初始化状态.因此类可以定义一个名为init()的特殊方法(构造方法)来实例化一个对象。

    构造方法也叫做构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被自动调用的方法。

    析构函数调用的契机【对象被销毁的时候】:

    1、程序执行结束,会自动调用析构函数

    2、使用del 删除对象的时候,系统会自动调用析构函数

    展开全文
  • Python-10】构造函数

    2019-05-11 15:29:50
    自己写构造函数 class FooBar: somevar= 0 def init(self): self.somevar = 100 ...在Python中,创建构造函数很容易,只需将方法 init 的名称从普通的 init 改魔法版 __init__即可。 class FooBa...

    自己写构造函数

    class FooBar:
    	somevar= 0
        def  init(self):
            self.somevar = 100
    foo = FooBar()
    print(foo.somevar)
    100
    

    调用内置方法

    在Python中,创建构造函数很容易,只需将方法 init 的名称从普通的 init 改为魔法版 __init__即可。

    class FooBar:
        def __init__(self):
            self.somevar = 25
            
    foo = FooBar()
    print(foo.somevar)
    25
    

    超类的构造函数

    # 基类
    class Bird:
        def __init__(self):
            self.hungry = True
        def eat(self):
            if self.hungry:
                print('Aaaah ... nice')
                self.hungry = False
            else:
                print('No, thanks!')
    
    bird = Bird()
    bird.hungry
    bird.eat()
    # Aaaah ... nice
    
    # SongBird 类继承了 Bird  类
    class SongBird(Bird):
        def __init__(self):
            self.sound = 'Sing a song!'
        def sing(self):
            print(self.sound)
    songB = SongBird()
    songB.sing()
    
    # 超类调用基类的方法
    songB.eat()
    
    # 运行报错
    '''
    Sing a song!
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-107-800cd686db7a> in <module>
         10 
         11 # 超类调用基类的方法
    ---> 12 songB.eat()
    
    <ipython-input-105-3615908d8440> in eat(self)
          4         self.hungry = True
          5     def eat(self):
    ----> 6         if self.hungry:
          7             print('Aaaah ... nice')
          8             self.hungry = False
    
    AttributeError: 'SongBird' object has no attribute 'hungry'
    '''
    

    因为在SongBird 中重写了构造函数,但新的构造函数没有包含任何初始化属性 hungry 的代码。要消除这种错误, SongBird 的构造函数必须调用其超类( Bird )的构造函数,以确保基本的初始化得以执行。为此,有两种方法:调用未关联的超类构造函数,以及使用函数 super 。接下来的两节将介绍这两种方法。

    调用未关联的超类构造函数

    class SongBird(Bird):
        def __init__(self):
            Bird.__init__(self)
            self.sound = 'Sing a song!'
        def sing(self):
            print(self.sound)
    songB = SongBird()
    songB.sing()
    
    # 对实例调用方法时,方法的参数 self 将自动关联到实例(称为关联的方
    # 法),这样的示例你见过多个。然而,如果你通过类调用方法(如 Bird.__init__ ),就没有实例
    # 与其相关联。在这种情况下,你可随便设置参数 self 。这样的方法称为未关联的。
    

    使用函数 super

    class SongBird(Bird):
        def __init__(self):
            # Bird.__init__(self)
            super().__init__()
            self.sound = 'Sing a song!'
        def sing(self):
            print(self.sound)
    songB = SongBird()
    songB.sing()
    

    总结

    相比较直接对超类调用未关联的方法(Bird.init(self), 不是调用一个示例的方法,而是直接使用类名调用方法),使用函数super更直观。但这并非其唯一的优点。实际上,函数 super 很聪明,因此即便有多个超类,也只需调用函数 super 一次(条件是所有超类的构造函数也使用函数 super )。

    展开全文
  • Python笔记之构造函数__init__

    千次阅读 2018-10-21 20:33:35
    构造函数 __init__初学者看着很吓人,...在Python中,创建构造函数很简单,只需要将方法init的名称从普通的init改成魔法版的__init__即可。如示例1 #示例1 &gt;&gt;&gt; class My: ... def __init__(...

    构造函数

    __init__初学者看着很吓人,其实它就是一个初始化方法,只是命名为__init__。然而,构造函数不同于普通方法的地方就在于,将在对象创建后自动调用它们。

    在Python中,创建构造函数很简单,只需要将方法init的名称从普通的init改成魔法版的__init__即可。如示例1

    #示例1
    >>> class My:
    ...     def __init__(self):
    ...             self.number = 45
    ...
    >>> F = My()
    >>> F.number
    45

    构造函数中也可以添加参数,由于参数是可选的,所有你也可以指定这个参数具体如示例2

    #示例2
    >>> class My:
    ...     def __init__(self, value=45):
    ...             self.number = value
    ...
    >>> F = My()
    >>> F.number
    45
    >>> F = My(" this")
    >>> F.number
    ' this'

    编写构造函数

    现在,我们来创建一个实例来尝试编写一个构造函数。编写一个Person类。具体见示例3

    >>> class Person:
    ...     def __init__(self, name, job=None, pay=0):
    ...         self.name = name
    ...         self.job = job
    ...         self.pay = pay
    ...
    >>> bob = Person('Bob Smith')
    >>> sue = Person('Sue Jones', job='dev', pay=10000)
    >>> print(bob.name, bob.job, bob.pay)
    Bob Smith None 0
    >>> print(sue.name, sue.job, sue.pay)
    Sue Jones dev 10000
    
    #这里的bob对象针对job和pay接受了默认值,但是sue显式地提供了值。
    #注意在创建sue时是如何使用关键字参数的

    赋给实例属性第一个值的通常方法是,在__init__构造函数方法中将它们赋给self,构造函数方法包含每次创建一个实例的时候Python会自动运行代码。在OO术语中,self就是新创建的实例对象,而name, job, pay变成了状态信息,即保存在对象中供随后使用的描述性数据。

    关于构造函数的疑惑解答

    1. 为什么类方法函数中的第一个参数特殊?        类方法中函中的第一个参数之所以特殊,是因为它总是接受将方法调用视为隐含主体的实例对象,按照惯例,通常称为self。因为方法函数默认总是有这个隐含的主体对象环境,所以我们说这是”面向对象“,也就是设计用来处理或修改对象的。
    2. __init__方法是做什么用的?        如果类中编写了或者继承了__init__方法,每次类实例创建时,Python会自动调用它。这也称为构造函数。除了明确传入类的名称的任何参数外,还会隐性的传入新实例。这也是最常见的运算符重载方法。如果没有__init__方法,实例刚创建时就是一个简单的空的命名空间。
       
    3. 怎么创建实例?       你可以调用类名称来创建类实例。任何传给类名称的参数都要出现在__init__构造函数中第二和其后的参数。新的实例会记得创建它的类,从而可以实现继承目的。

     

    展开全文
  • 问题:是否可以不使用字符串构造函数的情况下将变量用作表名?信息:我现在正在研究一个项目,该项目对来自我的恒星模拟的数据进行分类。为此,我将所有数据加载到sqlite数据库。它工作得很好,但是我决定...

    问题:是否可以在不使用字符串构造函数的情况下将变量用作表名?

    信息:

    我现在正在研究一个项目,该项目对来自我的恒星模拟的数据进行分类。为此,我将所有数据加载到sqlite数据库中。它工作得很好,但是我决定为数据库增加更多的灵活性,效率和可用性。我计划稍后在模拟中添加小行星,并希望为每个恒星提供一张表格。这样,我就不必查询每个太阳系中1-4k的20m个小行星的表。

    有人告诉我使用字符串构造函数是不好的,因为它使我容易受到SQL注入攻击。虽然这并不是什么大问题,因为我是唯一有权访问这些数据库的人,但我想遵循最佳实践。而且通过这种方式,如果我在向公众开放的情况下进行类似的项目,我也知道该怎么做。

    目前,我正在这样做:

    cursor.execute("CREATE TABLE StarFrame"+self.name+" (etc etc)")

    这可行,但是我想做更多类似的事情:

    cursor.execute("CREATE TABLE StarFrame(?) (etc etc)",self.name)

    尽管我知道这可能是不可能的。虽然我会满足于

    cursor.execute("CREATE TABLE (?) (etc etc)",self.name)

    如果根本不可能,我将接受该答案,但是如果有人知道执行此操作的方法,请告知。:)

    我在用python编码。

    展开全文
  • 一、公开构造函数的类通过查看RevitAPI可以看到:对于XYZ类给出了公开的API构造函数,如下图所示:(Tips:类的构造函数名称必须与类名称相同,例如XYZ类的构造函数名称必须XYZ(),可以作为查找构造函数的依据)...
  • Python-类的构造

    2020-11-23 14:14:29
    这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。 #类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它...
  • Python中所有类成员(包括数据成员)都是 公共 ,所有方法都是 有效.可其它类中使用. 若变量名称为双下划线前缀,则为私有变量.如 __private,可以只类 或 函数中使用,有效. __init__类中被用做构造...
  • 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于某些成员变量设置初始值。类似于 Python的 __init__() 函数。 1.1 声明和实现构造函数 通过下面示例理解构造...
  • 如果类编写了或继承了__init__方法,每次类实例创建时,Python会自动调用它,这被称为构造函数。除了明确传入类的名称的任何参数外,还会隐性的传入新实例。 任何传给类名称的参数都要出现__init__构造函数中第...
  • 请注意,通常您不应list_保留函数名称,例如list ,它是列表对象的构造函数-例如,可以使用lst或list_代替。#2楼实际上,这将从列表删除内容,但不会用新空列表替换旧标签:del lst[:]这是一个例子:l...
  • 通常,只需定义Eel,然后让默认class MyClass(tuple)将构造函数参数传递给它。__new__关键字在名称上是否可以更改其他名称? 但是我想知道Eel在名称方面是否可能会更改其他名称,因为它仅仅是参数名称?两者都...
  • 8.16 定义多个构造函数 296 8.17 不通过调用init来创建实例 298 8.18 用Mixin技术来扩展类定义 299 8.19 实现带有状态对象或状态机 305 8.20 调用对象上方法,方法名以字符串形式给出 311 8.21 实现访问者...
  • Python的类与实例详解

    2021-01-22 10:02:00
    接下来,一般都要编写构造函数写这个函数之前,先解释一下什么是构造函数。 class Person: def __init__(self, name, lang, website): self.name = name self.lang = lang self.website = website 上面类...
  • Python核心编程第二版(中文)

    热门讨论 2015-04-23 16:40:13
    14.3.6 使用Python在运行时生成和执行Python代码 14.4 执行其他(Python)程序 14.4.1 导入 14.4.2 execfile() 14.4.3 将模块作为脚本执行 14.5 执行其他(非Python)程序 14.5.1 os.system() 14.5.2 os...
  • 以下构造会绑定名称:传给函数的正式形参,import 语句,类与函数定义(这会定义的代码块绑定类或函数名称)以及发生以标识符目标的赋值,for 循环的开头,或with 语句和except 子句的as 之后。import 语句的 ...
  • Python核心编程(中文第二版)

    热门讨论 2009-10-02 12:08:14
    第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python  ... 12.3.3 无限制的名称空间   12.4 导入模块   12.4.1 import语句   12.4.2 from-import语句   12.4.3 多行导入   ...
  • 文章目录魔法方法构造函数迭代器生成器 魔法方法 在Python中,有些名称很特别...在Python中,创建构造函数很容易,只需将方法init的名称从普通的init改魔法版__init__即可。 class FooBar: def __init__(self): s
  • 在python中,有些名称很特别,开头和结尾都是两个下划线。这样的拼写表示名称有特殊意义,因此绝不要在程序中创建这样的名称。 在这样的名称中,有很大一部分都是魔法方法的名称。 在python3中没有旧式类,因此无需...
  • 类 首先,创建一个名‘Dog’的类,其中要包含...这个函数的名称是自己定义的,要注意的是自定义函数的参数一定要调用self,而且使用的参数是属性参数(如:self.age)。 class Dog(): def __init__(self,n
  • Python中很多名称比较古怪,开头和结尾都是两个下划线。这样的拼写表示名称有特殊意义,因此绝不要程序中创建这样的名称。这样的名称中大部分都是魔法(方法)的名称。如果你的对象实现了这些方法,他们将特定...
  • scikit-learn,它们作为参数传递给估计器类的构造函数。典型例子包括C, kernel和用于支持向量分类器gamma,用于Lassoalpha 等。调参即搜索超参数空间以获得最佳交叉验证(cross validation)分数。构造...
  • 10/5python学习

    2018-10-05 17:57:16
    1、构造函数只需将方法init的名称从普通的innit改魔法版__init__(注意前后均有两个下划线)即可。构造函数不同于普通方法的地方在于,将对象创建后自动调用它们。 如给构造函数添加几个参数 2、以下这一类...
  • scikit-learn,它们作为参数传递给估计器类的构造函数。典型例子包括C, kernel和用于支持向量分类器gamma,用于Lassoalpha 等。调参即搜索超参数空间以获得最佳交叉验证(cross validation)分数。构造...
  • 函数中的参数名称为形参,而你提供给函数调用值称为实参。将实参传递给形参是一个隐性赋值过程。 局部变量:当你在函数定义内声明变量时候,它们与函数外具有相同名称其他变量没有任何关系,即变量名称对于...
  • 算学费输入数据求最大精确划分思维解决最大次大交换数据实现按行显示围棋棋盘绘制国际象棋绘制什么要用函数函数的四种类型函数的一般形式必须用函数的理由-哥德巴赫函数的本质就是地址函数变量意义函数变量用途...
  • python-3.7.0b5下載

    2018-07-21 10:22:12
    注释只能使用当前范围内已有的名称,换句话说,它们不支持任何类型的前向引用; 注释源代码对Python程序的启动时间有不利影响。 通过推迟注释评估可以解决这两个问题。编译器不是编译定义时注释执行表达式的...
  • python cookbook(第3版)

    2016-01-06 22:24:38
    15.8 C和Python中的线程混用 15.9 用WSIG包装C代码 15.10 用Cython包装C代码 15.11 用Cython写高性能数组操作 15.12 将函数指针转换为可调用对象 15.13 传递NULL结尾字符串给C函数库 15.14 传递Unicode...
  • 深入理解Python中文版高清PDF

    热门讨论 2012-09-04 19:37:04
     10.3.7 应用使用我们封装的函数   10.3.8 else子句   10.3.9 finally子句   10.3.10 try-finally语句   10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理   10.4.1 with...
  • Python核心编程第二版

    热门讨论 2009-07-30 17:07:20
    很不错的python书 第1部分 Python核心  第1章 欢迎来到Python世界   1.1 什么是Python  ... 12.3.3 无限制的名称空间   12.4 导入模块   12.4.1 import语句   12.4.2 from-import语句   12.4.3 ...
  • 文件名数组工作区变量名称,附加扩展名 .txt。如果 writematrix 无法根据数组名称构造文件名,那么它会写入 matrix.txt 文件。 A 每个变量每一列都将成为输出文件中的列。writematrix 函数

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

在python中构造函数的名称为

python 订阅