python类

Python 类和对象,烤地瓜案例

爷,独闯天下 提交于 2020-02-29 17:05:32
#coding= utf-8 class SweetPotato: def __init__(self): self.cookedLevel = 0 self.cookedString = "生的" self.condiments = [] def cook(self,time): self.cookedLevel += time if self.cookedLevel > 8: self.cookedString = "烤焦了" elif self.cookedLevel > 5: self.cookedString = "烤熟了" elif self.cookedLevel > 3: self.cookedString = "半生不熟" else: self.cookedString = "生的" def addCondiments(self,addWhat): self.condiments.append(addWhat) #重点:一定要先判断大于8,再判断是否大于5,再判断大于3,如果不这样的话,反过来,程序会满足多个if def __str__(self): msg = "地瓜的生熟程度为:" + self.cookedString msg += ",等级为" + str(self.cookedLevel) if len(self.condiments)>0: msg +

[ python ] 类中的一些特殊方法

ε祈祈猫儿з 提交于 2020-02-29 01:37:39
item系列 __getitem__(self, item) 对象通过 object[key] 触发 __setitem__(self, key, value) 对象通过 object[key] = value 触发 __delitem__(self, key) 对象通过 del object[key] 触发 class Func: def __getitem__(self, item): # object[item] 触发 return self.__dict__[item] def __setitem__(self, key, value): # object[key] = value 触发 self.__dict__[key] = value def __delitem__(self, key): # del object[key] 触发 print('delitem: 删除key') del self.__dict__[key] def __delattr__(self, item): # del object.item 触发 print('delattr: 删除key') del self.__dict__[item] f = Func() f['name'] = 'hkey' # __setitem__ f['age'] = 20 # __setitem__ print

Python中的类C结构

泄露秘密 提交于 2020-02-26 16:33:52
有没有办法在Python中方便地定义类似C的结构? 我厌倦了写下这样的东西: class MyStruct(): def __init__(self, field1, field2, field3): self.field1 = field1 self.field2 = field2 self.field3 = field3 #1楼 每当我需要一个“也像字典一样的即时数据对象”时(我 不会 想到C结构!),我想到了这个可爱的黑客: class Map(dict): def __init__(self, **kwargs): super(Map, self).__init__(**kwargs) self.__dict__ = self 现在你可以说: struct = Map(field1='foo', field2='bar', field3=42) self.assertEquals('bar', struct.field2) self.assertEquals(42, struct['field3']) 当你需要一个“不是一类”的数据包时,以及当命名元组难以理解的那些时候,非常方便... #2楼 您可以通过以下方式访问python中的C-Style结构。 class cstruct: var_i = 0 var_f = 0.0 var_str = ""

python静态方法、类方法和实例方法

天大地大妈咪最大 提交于 2020-02-25 07:26:01
1. 静态方法 如果我们的类属性是一个私有变量,我们就需要定义一个函数使得在类外可以访问它。我们希望既可以用类名来访问,也可以用实例名来访问,那么该如何做呢? 下面这样是不行的: class Robot: # __开头表示私有变量 __counter = 0 def __init__(self): type(self).__counter += 1 def RobotInstances(self): return Robot.__counter if __name__ == "__main__": x = Robot() print("通过实例访问: ", x.RobotInstances()) # 下面会报错 print("通过类访问: ", Robot.RobotInstances()) 改代码无法通过类名访问,因为这种定义方式必须要定义一个实例,self指向这个实例。 如果我们在定义RobotInstances这个函数的时候,不写self参数,那么可以通过类访问,不能通过实例访问,静态方法就是为了解决这个问题。只需要在定义的函数前添加@staticmethod,这是装饰器语法。 class Robot: # __开头表示私有变量 __counter = 0 def __init__(self): type(self).__counter += 1 @staticmethod

类和对象

本秂侑毒 提交于 2020-02-22 09:23:12
类和对象 一、面向过程和面向对象 (1)面向过程 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。 缺点:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。 (2)面向对象 面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来。 优点:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。 缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题 , 即便是上帝也无法预测最终结果。于是我们经常看到修改游戏的某一参数的极有可能导致bug的出现,使这个游戏失去平衡。 应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。 面向对象编程可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效率

Python:class类

感情迁移 提交于 2020-02-21 07:57:42
类及其类属性 1.属性就是属于另一个对象的数据或者函数元素,可以通过我们熟悉的句点属性标示法来访问。 2. 类属性 仅与其被定义的类相绑定,由于实例对象在日常的面向对象编程中用得最多, 实例数据属性 是你将会一直用到的主要数据属性。 类数据属性仅当需要更加“静态”数据类型时才变得有用,他和任何实例都无关。 类的数据属性 这种属性是一种静态变量,表示这些数据是与他们所属的类对象绑定的,不依赖于任何类实例。 >>> >>> class my(object): ... foo=100 #类属性 ... >>> print my.foo 100 >>> my.foo=my.foo+1 >>> my.foo 101 >>> 以上代码没有出现任何实例的引用 方法 方法其实就是类中定义的函数,他是属于类属性的,并不属于实例属性。虽然他是类属性,但是并不能直接通过类来调用。 >>> class my(object): ... def my_method(self): ... pass ... >>> c=my() >>> c.my_method() #通过实例调用 >>> my.my_method() #通过类直接调用这个方法 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError:

python基础——类的属性和方法

人盡茶涼 提交于 2020-02-20 15:49:04
参考:https://www.runoob.com/python3/python3-class.html 类的属性 包含:私有属性和公开属性,也可称为私有变量公共开变量 私有属性 格式:__private_attr = attr_value 解释: 两个下划线 开头,声明该方法为私有方法, 只能在类的内部调用 ,不能在类的外部调用,也就是只能在类定义时访问。内部调用使用self.__private_attr。 普通的类中的属性和其他定义变量无区别 格式:变量名 = 变量值 # coding:utf-8 class A : __priv = 20 com = 30 a = A ( ) print ( a . com ) print ( a . __priv ) #实体对象使用私有属性报错 ''' 30 AttributeError: 'A' object has no attribute '__priv' ''' 类的方法 私有方法和公共方法,定义和属性的定义相同,使用权限也一样。 # coding:utf-8 class A : __priv = 20 com = 30 def __init__ ( self ) : #由于__priv是类中的属性,在内置函数中不需要写入形参 print ( "this is init:%d" % self . __priv ) def com

全面解析python类的绑定方法与非绑定方法

时光总嘲笑我的痴心妄想 提交于 2020-02-20 03:19:35
类中的方法有两类:  绑定方法  非绑定方法 一、绑定方法   1.对象的绑定方法   首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的。下面,我们通过实例,来慢慢解析绑定方法的应用。 class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk) 输出结果: <bound method People.talk of <__main__.People object at 0x000000F802C69358>>   从上面的输出结果来看,talk()這个类中的方法,是绑定给对象使用的。下面,我在看看另外一种情况。 class People: def __init__(self,name,age): self.name = name self.age = age def talk(): pass p = People('xiaohua',18) print(p.talk) 输出结果: <bound method People.talk of <__main__.People object at 0x000000FF68F39358>>   现在

关于python的类成员、实例成员、静态成员的对比与联系

六眼飞鱼酱① 提交于 2020-02-20 02:15:39
preface:本文是https://blog.csdn.net/qq_31780525/article/details/72639491一文的补充。 Python中的静态成员、非静态成员,与C#的静态成员、非静态成员有着一种千丝万缕的区别,此文专门针对这种区别,进行详细讨论。 推荐大家先看代码段,再看结论。边看代码段边思考。 首先,我们不妨将这种不带get、set方法的类成员属性称作为“字段”(C++,C#的说法)。此时,有如下代码段: 代码段_1 class people: name="Skar" #这个“字段”,既是类的,也是实例的,本文给它起个名字,叫“调皮字段” age=20 #同样,这个“字段”,既是类的,也是实例的 p=people() #p是people的一个实例 print(p.name) #打印结果:"skar"。所以,p的名字叫“skar”,符合认知 print(people.name) #打印结果:"skar"。所以,people的名字叫“skar”,但不符合认知 print(p.age) #打印结果:20。所以,p的年龄为20,符合认知 print(people.age) #打印结果:20。所以,people的年龄为20,但不符合认知 所以,在代码段_1中,并没有真正的“类字段”,也就是C#中的静态字段。同样的,也没有真正的“实例字段”,也就是C#中的

Python类

大城市里の小女人 提交于 2020-02-20 00:28:25
Python类 1 创建类 class Dog(): """模拟小狗""" def __init__(self,name,age): """初始化属性""" self.name = name self.age = age def sit(self): """模拟蹲下""" print(self.name + " 蹲下 !") def roll_over(self): """模拟小狗打滚""" print(self.name + " 滚一个 !") 2 根据类创建实例 class Dog(): ...snip... my_dog = Dog('小白',3) print("My dog's name is " + my_dog.name) print("My dog is " + str(my_dog.age) + " years old.") 2.1 访问属性 my_dog.name class Dog(): ...snip... my_dog = Dog('小白',3) print("My dog's name is " + my_dog.name) 2.2 调用方法 my_dog.sit() my_dog.roll_over() class Dog(): ...snip... my_dog = Dog('小白',3) my_dog.sit() my_dog.roll_over()