python类

4 python 类的专有方法介绍

寵の児 提交于 2020-02-19 17:03:04
1、 __init__ : 构造函数,在生成对象时调用 该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但不一定有返回值。 所谓初始化构造函数就是在构造对象的同时被对象自动调用,完成对事物的初始化,一个类只要生成一个类对象,它一定会调用初始化构造函数. 特点: 1>一个类中只能有一个初始化构造函数 2>不能有返回值 3>可以用它来为每个实例定制自己的特征 class Chinese: country = 'china' def __init__(self,name,sex,age): self.name = name self.sex = sex self.age = age def tell_info(self): info = f""" 国籍:{self.country} 姓名:{self.name} 性别:{self.sex} 年龄:{self.age} """ print(info) s1 = Chinese('alex','man','22') s2 = Chinese('alex2','woman','23') s3 = Chinese('alex3','man','21') 2、_mro_解析方法调用的顺序 继承的实现原理(多继承查找) >>> F.mro() #等同于F.__mro__ (<class '__main__.C'>,

【python】类的特殊成员方法<1>

邮差的信 提交于 2020-02-17 22:59:17
1.__doc__ :打印类的描述信息 class Foo: """ 描述类信息,这是用于看片的神奇 """ def func(self): pass print(Foo.__doc__) #>>>描述类信息,这是用于看片的神奇 2.__module__: 表示当前操作的对象在那个模块 """ mymodule """ class C: def __init__(self): self.name = 'paul' """ ------- """ from mymodule.lib import C obj = C() print (obj.__module__) # 输出 lib.aa,即:输出模块 #>>>>mymodule.lib 3.__class__ : 表示当前操作的对象的类是什么 """ mymodule """ class C: def __init__(self): self.name = 'paul' """ ------- """ from mymodule.lib import C obj = C() print (obj.__class__) # 输出 lib.aa.C,即:输出类 #>>><class 'mymodule.lib.C'> 4. __init__ :构造方法,通过类创建对象时,自动触发执行 class Role(object): #初始化函数

PYTHON的tkinter类编码技巧

梦想与她 提交于 2020-02-16 19:36:24
1 添加用户回调函数 1.1 三种回调处理器 1.1.2 lambda 回调处理器 #lambda 基础说明 --> lambda argument:expression te = lambda c : print ( c ) # lambda 返回的是一个可运行的函数对象 # 等价于 def te ( c ) : print ( c ) # 处理器,上述例子中,print(c)这个函数被称为处理器 对于GUI的效果:处理器的回调被延迟,可以添加需要的参数。 1.1.2 Bound方法的回调处理器(绑定方法self) 在类中绑定方法。如下所示 class HelloClass : def __init__ ( self ) : widget = Button ( None , test = 'Hello event world' , command = self . quit ) widget . pack ( ) def quit ( self ) : print ( 'Hello class method world' ) sys . exit ( ) # 实际上传送的参数时 self 和 quit, 如果 这里要特别说明一点,传入一个未绑定的方法在GUI中是不起作用的。 1.1.3 可调用类对象的回调处理器 在可调用类的绑定方法,主要是通过 call 方法来实现拦截运行

Python的类

为君一笑 提交于 2020-02-16 19:05:47
Python是一种面向对象的语言。以其中的list数据结构来说,我们知道它存在list.append(),list.remove(),list.sort()等方法。 显然,由于list结构的存在,我们可以批量的形成多个list实例,例如 A = [1,2,3] B = [3,4,5] 显然,这里的list本质上就是一个类,而它存在很重要的一个原因就是可以将类对象进行量产。 目录 1.创建一个类 2.类的继承 3.类的多态 4.self是什么? 5.__init__是什么? 6.变量的公有和私有 1.创建一个类 比如,这里我们写一个乌龟的类, class Turtle(): def climb(self): print("正在努力的向前爬") def run(self): print("正在努力的向前跑") def bite(self): print("正在努力的向前咬") 这样,我们可以将这个类进行实例化。 tt = Turtle() 进一步,可以实现方法 2.类的继承 (1)继承是基于父类构建一个子类的简便方法。例如,我们可以基于Turtle类进一步构建一个忍者神龟类(NinjaTurtle) class NinjaTurtle(Turtle): pass 进一步实例化,并调用Turtle属性 NT = NinjaTurtle() 需要注意的是,如果子类定义了和父类一样的方法

python 混入类MixIn

邮差的信 提交于 2020-02-13 02:22:27
写在前面 能把一件事情说的那么清楚明白,感谢廖雪峰的官方网站。 1.为什么要用混入类?(小白入门) 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。 step1: 回忆一下 Animal 类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗; Bat - 蝙蝠; Parrot - 鹦鹉; Ostrich - 鸵鸟。 step2: 如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次: step3: 但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次: step4: 如果要把上面的两种分类都包含进来,我们就得设计更多的层次: 哺乳类:能跑的哺乳类,能飞的哺乳类; 鸟类:能跑的鸟类,能飞的鸟类。 这么一来,类的层次就复杂了: step5: 如果要再增加“宠物类”和“非宠物类”,这么搞下去, 类的数量会呈指数增长 , 很明显这样设计是不行的 。 step6: 正确的做法是采用多重继承 。首先,主要的类层次仍按照哺乳类和鸟类设计: 2.MixIn混入类的的定义 在设计类的继承关系时,通常,主线都是单一继承下来的,例如, Ostrich 继承自 Bird 。但是,如果需要“混入”额外的功能,通过 多重继承 就可以实现,比如,让 Ostrich 除了继承自 Bird 外,再同时继承 Runnable 。这种设计通常称之为MixIn。

Python学习第十五课——类的基本思想(实例化对象,类对象)

China☆狼群 提交于 2020-02-10 15:47:05
类的基本思想 类:把一类事物的相同的特征和动作整合到一起就是类 类是一个抽象的概念 对象:就是基于类而创建的一个具体的事物(具体存在的) 也是特征和动作整合到一块 对象写法 # 对象写法 def school(name, addr, type): # 对象 def __init__(name, addr, type): # 初始化 sch = { 'name': name, 'addr': addr, 'type': type, 'kaoshi': kao_shi, 'zhaosheng': zhao_sheng, } return sch def kao_shi(school): print('%s 学生正在考试' % school['name']) def zhao_sheng(school): print('%s %s 正在招生' % (school['type'], school['name'])) return __init__(name, addr, type) s1 = school('Hs', 'henan', '私立学校') print(s1['name']) s1['zhaosheng'](s1) # 类的相关属性 class Chinese: # 类 tuanyuan='团员' # 属性 def sui_di_tu_tan(): # 函数 print(

PYTHON 类的三大特性

邮差的信 提交于 2020-02-10 08:52:09
     三大特性:封装、继承、多态 成员:   字段  静态字段(每个对象都有一份)、普通字段(每个对象都不同的数据)   方法  静态方法(无需使用对象封装的内容)@staticmethod、类方法(会自动加当前类的类名 def xxx (cls):)@classmethod、普通方法(使用对象中的数据)   特性  普通特性(将方法伪造成字段) 方法上面加@property(执行的时候不用加括号 obj.xxx)    快速判断,类执行,对象执行:   有self,对象执行   无self,类执行 补充: 查找源码的过程(self.xxxx(),从底层开始找) 执行父类的构造方式:   super(当前类,self),init()   父类.__init__(self,xxx) 面向对象常用方法 __init__ __call__  r=Foo() r() 在类里面定义了 __call__方法后就可以实现 __delitem__  del r['wqe] __getitem__ 这个方法可以用r[1]来访问对象 r[1:3]切片也可以取值 __setitem__ r['e']=213 __dict__ 可以用 类.__dict__ 展示所有类的成员 __iter__   __str__ __oo='xx' 这是成员修饰符 (在类的内部能调用,外部要通过 对象_类名__成员)

第三章:类与继承(Ⅱ)

99封情书 提交于 2020-02-09 01:28:44
这篇文章是基于 《Effective Python——编写高质量Python代码的59个有效方法》[美] 布雷特·斯拉特金 著 爱飞翔 译 这本书中的内容,写写自己在某方面的感悟,并摘录一些作为读书笔记供今后鞭策。侵删。 第 24 条:以 @classmethod 形式的多态取通用地构建对象 在 python 中,不仅对象支持多态,类也支持多态,那么类的多态是什么意思呢? 多态,使得继承体系中多个类都能以各自所独有的方式来实现某个方法。这些类,都满足相同的接口或继承自相同的抽象类,但却有着不同的功能。 例如,为了实现一套 MapReduce 流程,我们需要定义公共基类来表示输入的数据。下面这段代码就定义了这样的基类,它的 read 方法必须由子类来实现。 In [ 1 ] : class InputData ( object ) : . . . : def read ( self ) : . . . : raise NotImplementedError . . . : In [ 2 ] : class PathInputData ( InputData ) : . . . : def __init__ ( self , path ) : . . . : super ( ) . __init__ ( ) . . . : self . path = path . . . : def

python--类的继承

两盒软妹~` 提交于 2020-02-08 16:50:56
继承基础 继承的优点 新类不用从头编写,复用已有代码 新类从现有的类继承,就自动拥有了现有类的全部功能 新类只需要编写现有类缺少的功能 继承的特点 子类和父类是一个is关系 class person(object): pass class student(person): pass p = person() s = student() p是一个person,p不是一个student s是一个person,s也是一个student 总是要从某个类继承,没有就object super.__init__() 此方法用于初始化父类 def __init__(self,args): super(Subclass,self).__init__(args) pass 错误的继承 student和book是has关系 class student(book): pass has关系应该使用组合而非继承 class person(object): pass class book(object): def __init__(self,name): self.name = name class student(person): def __init__(self,bookName): self.book = book(bookName) 如果已经定义了Person类

Python 中的经典类新式类

99封情书 提交于 2020-02-07 23:37:16
Python 中的经典类新式类 要知道经典类和新式类的区别,首先要掌握类的继承 类的继承的一个优点就是减少代码冗余 广度优先和深度优先,这主要是在多类继承的时候会使用到 经典类和新式类的主要区别就是 类的继承的方式 经典类遵循深度优先的规则,新式类遵循广度优先的规则。 至于什么是深度优先什么是广度优先,可以看如下示例: class A: def save(self): print("a") class B(A): def save(self): print("b") class C(A): def save(self): print("c") class D(B, C): def __init__(self): pass d = D() d.save() >> b 在新式类中,D是继承B和C的,按照顺序,首先去找B 如果在B里面能找到实例化对象,便继承B,不再往别的地方寻找, 如果没有,就会接着找C,而不是找B的父亲A! 但是在经典类中,如果B中找不到,它会优先考虑B的父亲A,而不是C。 在 python3 中,都是遵循广度优先的规则 在python2.7以前,应该是遵循深度优先的的规则。两种规则没有优劣之分。 来源: https://www.cnblogs.com/kai-/p/12274235.html