首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python类中__init__()的作用

最开始学习python,认为定义类时__init__方法的作用等同于C中的构造函数,但是使用之后发现也有区别。...__init__(a,"wang")即__init__的作用是初始化实例后的对象b在子类不重写__init__方法时,子类会默认调用父类中的__init__方法子类也可以重写__init__方法,来给子类定义专属属性当然...,上面写的是比较官方的解释用简单的话来讲,可以理解为,类的属性如果直接写在类里面一般是要有值的。...例如:class fun() a = 3这样的情况下,类中的属性无法变成变量,当将类的属性以self.a的方式定义到初始化方法中,那属性也可以当成变量例如:class fun(): def _..._init__(self, a): self.a = af = fun(3)print(f.a)Output:--3--

2.5K10

Python类中super()和__init__()的关系

Python类中super()和__init__()的关系1.单继承时super()和__init__()实现的功能是类似的class Base(object): def __init__(self...-------------------------------3. super不是父类,而是继承顺序的下一个类在多重继承时会涉及继承顺序,super()相当于返回继承顺序的下一个类,而不是父类,类似于这样的功能...,因此执行顺序是A —> B—>—>Base  执行过程相当于:初始化childC()时,先会去调用childA的构造方法中的 super(childA, self)....__init__(), super(childA, self)返回当前类的继承顺序中childA后的一个类childB;然后再执行childB().__init()__,这样顺序执行下去。  ...,super()的第一个参数可以是继承链中任意一个类的名字,如果是本身就会依次继承下一个类;如果是继承链里之前的类便会无限递归下去;如果是继承链里之后的类便会忽略继承链汇总本身和传入类之间的类;比如将childA

72710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在__init__中设置对象的父类

    1、问题背景在Python中,可以为对象设置一个父类,从而实现继承。但是,如果想要在实例化对象时动态地指定父类,则会出现问题。...(parent=Blue)blue_square = Square(parent=Blue)但是,这段代码会报错,因为在Python中,对象的父类只能在类定义时指定,不能在实例化对象时动态设置。...第一个解决方案是使用类工厂。类工厂是一个函数,它可以动态地创建类。在类工厂中,可以根据传入的参数来决定创建哪个类。...然后,它根据parent的值来决定创建哪个类。如果parent是Red,则创建一个Circle类,它的父类是Red。...依赖注入是一种设计模式,它可以将对象的依赖关系从对象本身中解耦出来。这样,就可以在实例化对象时动态地注入它的依赖关系。

    11110

    python类中super()和__init__()的区别

    super()只能用于新式类中 把基类改为旧式类,即不继承任何基类 class Base(): def __init__(self): print 'Base create' 执行时...__init__() TypeError: must be type, not classobj super不是父类,而是继承顺序的下一个类 在多重继承时会涉及继承顺序,super()相当于返回继承顺序的下一个类...,因此执行顺序是A —> B—>—>Base 执行过程相当于:初始化childC()时,先会去调用childA的构造方法中的 super(childA, self)...._init_(), super(childA, self)返回当前类的继承顺序中childA后的一个类childB;然后再执行childB()._init()_,这样顺序执行下去。...,super()的第一个参数可以是继承链中任意一个类的名字, 如果是本身就会依次继承下一个类; 如果是继承链里之前的类便会无限递归下去; 如果是继承链里之后的类便会忽略继承链汇总本身和传入类之间的类;

    97260

    Python类中的__new__和__init__的区别

    在写Python类时,或者看某些项目源码时,总是见到__init__和__new__方法,一直没有深入研究两者的区别,今天聊聊这个。 __new__ __new__是类(class)方法。...class新创建实例时,会调用__new__,它主要控制一个新实例的创建。 需要知道的是,__new__是实例创建的第一步。首先调用它,再由它负责返回类的新实例。...针对__new__的用法,举个栗子: 依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径...通过重载__new__方法,我们实现了需要的功能。 __init__ __init__是实例方法。...每新创建一个实例,实例都会初始化这些内容,这些内容都是初始化给新创建的实例,跟class无关。 __init__不返回任何东西。

    73250

    python中的类,对象,成员方法,构造方法,__init__,__lt__,__le__,__eq__

    python中的类,对象,成员方法,构造方法,init,lt,le,eq 定义方法 class是关键字,表示要定义类了 类的属性,即定义在类中的变量(成员变量) 类的行为,即定义在类中的函数(成员方法)...例子演示 __init__(构造方法) 定义一个学生类,然后这个学生类具有学生的基本信息,比如,学号,姓名,性别,年龄,然后这个学生具有eating方法,这个方法会向屏幕打印,“I have eating...定义类的代码, 这里主要需要注意的是,普通成员变量的定义方法,需要通过None进行初始化操作,然后还有python中的构造方法的写法,__init__通过这个方法进行构造方法,然后self,相当于c++...,在python中如何定义对象。...中自定义的,小于符号的编写 class Student: def __init__(self, name, age): self.name = name self.age

    8600

    Python中的__init__()方法整理中(两种解释)

    在我们接触__init__()方法之前,无论如何,我们都需要粗略、简单地看看在Python中隐含的object类的层次结构。...无论如何,这个设计给予了很大的灵活性,这样有时候我们不用在__init__()方法中设置所有属性。至此我们走的很顺利。一个可选属性其实就是一个子类,只是没有真正的正式声明为子类。...我们想尽可能的弄清楚,因此我们需要定义一个初始化来正确的描述问题域。 在我们接触__init__()方法之前,无论如何,我们都需要简单粗略地看看Python中隐含的object类的层次结构。...无论如何,这个设计给予了很大的灵活性,这样有时候我们不用在__init__()方法中设置所有属性。至此我们走的很顺利。一个可选属性其实就是一个子类,只是没有真正的正式声明为子类。...在超类中实现__init__() 我们通过实现__init__()方法来初始化对象。当一个对象被创建,Python首先创建一个空对象并为该新对象调用__init__()方法。

    2.7K60

    Python中的__init__()方法整理中(两种解释)

    在我们接触__init__()方法之前,无论如何,我们都需要粗略、简单地看看在Python中隐含的object类的层次结构。...无论如何,这个设计给予了很大的灵活性,这样有时候我们不用在__init__()方法中设置所有属性。至此我们走的很顺利。一个可选属性其实就是一个子类,只是没有真正的正式声明为子类。...我们想尽可能的弄清楚,因此我们需要定义一个初始化来正确的描述问题域。 在我们接触__init__()方法之前,无论如何,我们都需要简单粗略地看看Python中隐含的object类的层次结构。...无论如何,这个设计给予了很大的灵活性,这样有时候我们不用在__init__()方法中设置所有属性。至此我们走的很顺利。一个可选属性其实就是一个子类,只是没有真正的正式声明为子类。...在超类中实现__init__() 我们通过实现__init__()方法来初始化对象。当一个对象被创建,Python首先创建一个空对象并为该新对象调用__init__()方法。

    6.6K50

    Python自学成才之路 元类中的__new__和__init__方法

    元类其实和普通类一样,普通类的__new__方法是创建实例,__init__方法是初始化实例,说是初始化,其实就是可以给实例添加一些属性。...元类__init__中的第一个参数是cls(普通类是self)表示的是类实例本身,有了类实例本身,当然能对类做一些修改。那么在__new__和__init__方法中都可以对类实例做什么样的修改?...建议:在看本节之前建议先debug下一节的最后一个案例(传送门) 元类中,__new__和__init__中除了第一个参数不一样,其它参数都是一样的,参数都是类名,基类,类属性字典。...这是元类创建一个类的三要素。在下面这个案例中,我将分别在__new__和__init__方法中做一些手术。...主要原因是创建类实例是在__new__方法中执行的,在__init__方法中实例已经生成了,改三要素也不会再一次生成类实例。所以要想在__init__方法中起到作用,只能修改实例本身。

    64830

    读取文档数据的各列的每行中

    读取文档数据的各列的每行中 1、该文件的内容被读 [root@dell leekwen]# cat userpwd 1412230101 ty001 1412230102 ty002.../readfile.sh userpwd 当前处理的是第1, 内容是:1412230101 ty001, 它的第一列值是1412230101, 它的第二列值为ty001 当前处理的是第..., 它的第一列值是1512430102, 它的第二列值为ty003 当前处理的是第4, 内容是:1511230102 ty004, 它的第一列值是1511230102,...它的第二列值为ty004 当前处理的是第5, 内容是:1411230102 ty002, 它的第一列值是1411230102, 它的第二列值为ty002 当前处理的是第6, 内容是...它的第一列值是1412290102, 它的第二列值为yt012 当前处理的是第8, 内容是:1510230102 yt022, 它的第一列值是1510230102,

    2K40

    Java中的字符串操作(String类的函数方法)

    String是Java中的类,它提供一些预定义的方法,这些方法使基于字符串的问题解决方案更加容易。 我们不需要为每个操作编写代码,我们只需使用其方法即可。    ...在本文中,我们将学习一些最有用的字符串方法。    ...此函数用于从字符串的第 N 个索引中获取字符。 请记住,字符串的索引从0开始。    ...此函数用于获取任何子字符串的起始索引。 在这里,如果子字符串s2存在于字符串s1中 ,它将返回子字符串s2的起始位置(索引)。 如果字符串中不存在子字符串,则返回-1 。    ...此函数用于比较两个字符串,如果两个字符串相同,则返回0,如果字符串s1小于s2,则返回负值;如果字符串s2小于字符串s1,则返回正值。 负值和正值取决于第一个不同字符的ASCII码的差异。

    1.1K00

    python中类的静态方法和类的类方法

    知识回顾: 上一节中,我们深化学习了类的属性监控,主要使用了三个魔法方法: __getattr__ __setattr__ __delattr__ 与此同时在书写属性设置监控的时候,千万不要忘记写__...---- 本节知识视频教程 以下开始文字讲解: 一、类的属性监控的作业 案例:使得类的某个属性值大于10 思路: 1.设置一个类 2.定义一个__setattr__方法,用来监控属性 3.类的实例化,...设置类的属性 4.通过查看类的属性的值,来看属性监控是否成功 二、类的静态方法 在类中的方法名称前加一个头标记@staticmethod。...三、类的类方法 在类中的方法名称前加一个头标记@classmethod。 类的类方法的调用也不需要进行实例化。 类的类方法是在python中对类的构造方法的一个补充。...但在定义类方法的时候需要一个类的本身的参数。

    3.2K20

    C++字符串 string 类中的几种常用方法

    相较于C,C++中引入了string类,这使得存储字符串时不易溢出,更加安全, 而其中包含的各种操作字符串的函数,使用起来更是方便。...下面是其中几种常见的函数的使用方法: begin() //返回字符串的首个字符的下标位置 end() //返回字符串(末位+1)的下标位置 使用end()时若想取得位于末位的字符...find_first_of(const string& str, size_t pos = 0) //查找某一段字符,返回该字符段中任意一个字符第一次出现在字符串中的位置 first_last_of(const...需要注意的是若查找的不是单个字符,而是字符段,那么他会返回该字符段中任意一个字符第一次出现(或最后一次出现)的位置(即只要查找到某一个属于该字符段的字符,就输出这个字符第一次出现(或最后一次出现)的下标...insert() //在指定位置插入字符段 三种常用方法: 1)insert(2,"@@@"); //在下标为2的字符后插入字符串"@@@" 2) insert(2,3,’@’);

    1.2K50

    如何对类中的private方法进行测试?

    问题:如何对类中的private方法进行测试? 大多数时候,private都是给public方法调用的,其实只要测试public即可。...但是有时由于逻辑复杂等原因,一个public方法可能包含了多个private方法,再加上各种if/else,直接测public又要覆盖其中每个private方法的N多情况还是比较麻烦的,这时候应该考虑单对其中的...那么如何进行呢? 思路: 通过反射机制,在testcase中将私有方法设为“可访问”,从而实现对私有方法的测试。...这也是为什么对protected方法更建议用继承的思路去测。 附: 测试类改写为下面这种方式,个人感觉更清晰。...//改写一个sub方法,与Demo类相同,只是将其变成public class DemoForTest extends Demo{ public function sub($a, $b){

    3.4K10

    类中的构造方法

    1、构造方法概述 1.1、什么是构造方法 构造方法是正常开发中不可或缺的一部分,是语法上必须存在的。是一个具有特殊格式的方法,且有特殊的调用方式。...,Java会自动为我们补齐一个无参的构造方法。...new 类名([实参列表]); Person p = new Person();  //产生了Person的对象 System.out.println(p);  //打印结果为一个对象地址值,如0x9a64...3.2、注意事项 接口没有构造方法,抽象类具有构造方法 构造方法不能被继承,如:父类叫Person,子类叫Student 继承构造方法后,那么我new Person()后是子类的对象,还是父类的对象,...而且构造方法要求与类名相同,那么子类里面的Person构造方法和类名冲突了 构造方法的public并不是固定不变的,可以使用其他格式修饰构造方法。

    1.1K20

    python 类中的方法

    数据流转过程 除了在类中可以写这种函数之外,在类中还可以写别的函数,延续上一个例子: #!...首先看看数据是如何在这个代码中流转的。 定义类Person,然后创建实例hiekay=Person(“hiekay”)。...hiekay”是一个具体的数据,通过构造函数中的name参数,传给实例的属性self.name,在类Person中的另外一个方法author的参数列表中第一个就是self,表示要承接self对象,return...编写和操作方法 编写方法的过程和编写一个函数的过程一样,需要注意的就是要在参数列表中第一个写上self,即使没有其它的参数。 #!...对author方法增加了一个参数address,当调用这个方法的时候:hiekay.author(“China”),要对这个参数赋值,在类中,这个方法显示是有两个参数(self,address),但是在调用的时候

    1.4K10
    领券