python类

python中的新式类和旧式类

三世轮回 提交于 2020-02-04 14:12:20
python中的新式类和旧式类 2018-05-15 python2中既有新式类又有旧式类 默认是经典类,只有显式继承object才是新式类 python3中只有新式类 默认是新式类,不必显式继承ojbect 新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索 新式类相同父类只执行一次构造函数,经典类重复执行多次。 新式类都从object继承,经典类不需要 以下是一个例子: class A: pass class B: pass class C(B): pass class D(C,A): pass 执行顺序为:D->C->B,->A class A(object): pass class B(object): pass class C(object): pass class D(A,B,C): pass 执行顺序为: D->A->B->C->Object 来源: https://www.cnblogs.com/aaron2932/p/aaron.html

python 类学习笔记

血红的双手。 提交于 2020-02-04 13:49:21
Python的类机制使用尽可能少的新语法和语义将类引入语言。Python的类提供了面向对象程序设计语言所有的 标准特性:类继承机制允许有多个基类,一个派生类可以覆盖基类中的任何方法,一个方法可以使用相同的名字调用 基类中的方法。 Table of Contents 1 名字和对象 2 Python的域(scopes)和名称空间(namespaces) 3 初识类 3.1 定义类 3.2 类对象 3.3 实例化对象 3.4 方法对象 4 漫谈 5 派生 6 多重继承 7 私有变量和类局部引用 8 结构体 9 异常(Exceptions)也是类 10 迭代器 11 生成器(Generators) 1 名字和对象 对象有其特性,同一个对象可以有多个名字,这与其它语言中的别名很相似。别名有时候像指针,例如将对象当做 函数参数传递的时候非常高效,因为只传递了指针,这避免了pascal中的两套参数传递机制。 2 Python的域(scopes)和名称空间(namespaces) 在引入类之前,我们讲Python的域规则。类的定义巧妙地运用了名称空间,所以你需要知道域和名称空间如何工作才能理解发生了什么。 首先从定义开始。 名称空间是名字和对象之间的映射。多数名称空间使用Python的字典来实现,但 除非出于性能考虑,我们 通常不关心具体如何实现。名称空间的例子有,内置的名称例如abs()

Python基础23类-多态

痞子三分冷 提交于 2020-01-31 10:20:43
1 #多态概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不考虑他们具体的类,通过继承实现多态 2 class H2O: 3 def __init__(self,name,temperature): 4 self.name=name 5 self.temperature=temperature 6 def turn_ice(self): 7 if self.temperature < 0 : 8 print('[%s]温度太地结成冰了'%self.name) 9 elif self.temperature > 0 and self.temperature < 100 : 10 print('[%s]液化成水'%self.name) 11 elif self.temperature >= 100 : 12 print('[%s]温度太高变成水蒸气'%self.name) 13 class Water(H2O): 14 pass 15 class Ice(H2O): 16 pass 17 class Steam(H2O): 18 pass 19 20 w1=Water('水',100) 21 s1=Steam('水蒸气',-10) 22 w1.turn_ice() 23 s1.turn_ice() 来源: https://www.cnblogs.com/josie930813

Python学习笔记——类(一)

拜拜、爱过 提交于 2020-01-31 09:26:43
创建和使用类 关于类的概念是我学习以来第一次碰到 面向对象编程,随着学习深入,再进行补充 附上练习代码 # 面向对象编程 # 表示小狗的一个简单类 class Dog ( ) : """一次模拟小狗的简单尝试""" def __init__ ( self , name , age ) : """初始化属性 name 和 age""" self . name = name self . age = age def sit ( self ) : """模拟小狗被命令时蹲下""" print ( self . name . title ( ) + ' is sitting now.' ) def roll_over ( self ) : """模拟小狗被命令时打滚""" print ( self . name . title ( ) + ' rolled over!' ) # 小写开头的my_dog是一个表示特定小狗的实例 my_dog = Dog ( 'William' , 6 ) print ( my_dog . name . title ( ) + ' ' + str ( my_dog . age ) ) # 使用句点法调用类中的定义 my_dog . roll_over ( ) my_dog . sit ( ) # 可创建多个实例 your_dog = Dog ( 'lucy'

Python 入门 17 —— 类的魔法方法、__new__() 函数

为君一笑 提交于 2020-01-30 15:45:22
类的魔法方法实质是 python 的内置方法,不需要主动调用。当我们在进行某种类的运算或操作时,python的解释器会自动调用相应的魔法方法。 类的魔法方法总是被双下划线所包围,一般格式为:“ 方法名 ”,它们功能强大,充满魔力。通过重载,魔术方法的实际功能可以根据实际需要进行更改。例如: init () 就是一个典型的魔法方法,当创建对象时会被系统调用,在定义类时,也可以根据需要设置它的实际功能。 一、基本魔法方法 x. init () ———— 创建对象后:MyObj = MyClass() x. repr () ———— repr(x) x. str () ———— str(x) x. bytes () ———— bytes(x) x. format (format_spec) ———— format(x, format_spec) seq. iter () ———— iter(seq) seq. next () ———— next(seq) seq. reversed () ———— reversed(seq) x. getattribute (‘my_property’) ———— x.my_property x. getattr (‘my_property’) ———— x.my_property x. setattr (‘my_property’, value) ——

【Python】类及其常用操作

穿精又带淫゛_ 提交于 2020-01-30 07:06:58
类及其常用操作 创建类 在Python中,首字母大写的名称指的是类。 class Dog ( ) : """一次模拟小狗的案例""" def __init__ ( self , name , age ) : """初始化属性name和age""" self . name = name ; self . age = age ; def sit ( self ) : """模拟小狗蹲下""" print ( self . name . title ( ) + " is now sitting." ) def roll_over ( self ) : """模拟小狗打滚""" print ( self . name . title ( ) + " rollwd over!" ) 这里类定义中括号是空的,是因为要从空白创建这个类。 **方法__init__() **定义成了包含三个形参:self、name和age。形参self必不可少,还必须位于其他形参的前面。因为Python调用这个__init__()方法创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。 根据类创建实例 my_dog = Dog ( "willie" , 6 ) print ( "My dog's name is " +

Python静态方法和类方法

醉酒当歌 提交于 2020-01-29 00:16:43
静态方法和类方法 静态方法 声明:使用装饰器@staticmethod 调用:类.静态方法() 特点:没有默认的参数 使用规则:实现函数的功能不需要对象,静态方法声明的函数属于当前类,但是不属于该类创建的对象。 例如声明一个计算三角形面积的类,但是在计算三角形面积之前需要判断三条边是否能够构建成一个三角形,在判断之前没有用到该类的属性,那就可以使用静态方法 from mant import sqrt class Triangle : def __init__ ( self , a , b , c ) : self . a = a self . b = b self . c = c @ staticmethod def valid ( a , b , c ) : return a + b > c and a + c > b and b + c > a def perimeter ( self ) : return self . a + self . b + self . c def area ( self ) : half = self . perimeter ( ) / 2 return sqrt ( half * ( half - self . a ) * ( half - self . b ) * ( half - self . c ) ) def main ( ) : a ,

python 类

廉价感情. 提交于 2020-01-28 13:44:30
class w_contacts: def __init__(self, someones_name, someones_phone, someones_job, someones_age): self.name=someones_name self.phone=someones_phone self.job=someones_job self.age=someones_age def save(self): with open('contacts.txt', 'a') as f: f.write("name: {}\nphone: {}\njob: {}\nage: {}".format(self.name, self.phone, self.job, self.age)) def load(self): print("name: {}\nphone: {}\njob: {}\nage: {}".format(self.name, self.phone, self.job, self.age)) contact = w_add_address('www', 123456789, 'DLP', 19) contact.save() contact.load() class w_add_address(w_contacts): def __init__(self, n, p, j,

Python类中__init__()的作用

孤街浪徒 提交于 2020-01-25 10:30:55
最开始学习python,认为定义类时__init__方法的作用等同于C中的构造函数,但是使用之后发现也有区别。 # coding:utf-8 class a(): def __init__(self,name): self.name = name def get_name(self): return self.name b = a("wang") print(b.get_name()) Output: ----- wang ----- 例如: 执行时的步骤可以理解为; b = object.__new__(a) a.__init__(a,"wang") 即__init__的作用是初始化实例后的对象b 在子类不重写__init__方法时,子类会默认调用父类中的__init__方法 子类也可以重写__init__方法,来给子类定义专属属性 当然,上面写的是比较官方的解释 用简单的话来讲,可以理解为,类的属性如果直接写在类里面一般是要有值的。 例如: class fun() a = 3 这样的情况下,类中的属性无法变成变量,当将类的属性以self.a的方式定义到初始化方法中,那属性也可以当成变量 例如: class fun(): def __init__(self, a): self.a = a f = fun(3) print(f.a) Output: -- 3 -- 来源: CSDN

Python 入门 16 —— 类的多态、 MRO列表、 super()函数

守給你的承諾、 提交于 2020-01-25 04:59:28
一、多态 当多个子类继承同一个父类时,在各个子类中都可以重载父类的成员。通过各自的重载,父类的某一成员在不同的子类中就会有不同的“表现”,这种现象就叫“多态”。例如: class b01 : x = 0 class cls01 ( b01 ) : x = 11 class cls02 ( b01 ) : x = 22 class cls03 ( b01 ) : x = 33 class cls04 ( b01 ) : x = 44 class cls05 ( b01 ) : x = 55 print ( cls01 . x , cls02 . x , cls03 . x , cls04 . x , cls05 . x ) # 11 22 33 44 55 以上例子中基类中定义的变量 x,当用不同的子类中,其值各不相同,这就是典型的“多态”现象。不过,以上例子展示的是最简单的多态形式。在实际的子类重载父类成员的过程上,通常都会引用父类的成员,即,父类已有的功能不再重复实现。 在派生类中引用基类成员可以有两种方法:一是用“基类名.成员名”的方法;二是用“super().成员名”的方法。用“基类名.成员名”的方法虽然简单明了,但潜在一个问题:当基类名发生改变时,子类就必须同时进行修改————逐一地在引用基类成员的地方将旧的基类名修改为新的基类名。而用“super().成员名