类属性

8.1Python面向对象编程(一)

可紊 提交于 2020-02-05 13:50:01
目录 目录 前言 (一)基本概念 ==1.面向过程与面向对象== ==2.类与对象== (二)类属性的相关操作 ==1.定义一个经典类== ==2.对象属性的操作== ==3.类属性的操作== ==4.限制对象属性== (三)类方法的相关操作 ==1.类方法的分类== ==2.不同类方法的使用不同属性== 目录 前言 在此之前,我们以前写的编程,都是面向过程的编程,今儿起,我们开始学习一类编程的思想,也是相对面向过程更高级的思想,面向对象编程。 (一)基本概念 ==1.面向过程与面向对象== (1)面向过程 侧重任务的规划,关心每一个步骤,并且自己一一实现。 相当于施工者。 (2)面向对象 侧重的是谁能做,然后派人去做,而不是自己去做,自己作为宏观调控,管理者。 相当于包工头。 (3)面向过程与面向对象的关系 共同点: 都是解决问题的一种思路,办法。 不同点: 面向对象其实就面向过程的一个封装,面向对象里面具体实施,也是要到面向过程来实现的。 ==2.类与对象== (1)类的概念 类是由事物抽象出来的一个模板,这个模板可以创建其他的对象。 像人类也是一个类,小猫小狗是动物类。 python是一门彻底的编程语言,在python一切都是对象。 类下面有两个特征名称: 属性:静态的特征值 方法:动态的行为 (2)对象的概念 对象是指具体的事物,万物皆对象。 像张三这个人,是具体一个人

property装饰器

♀尐吖头ヾ 提交于 2020-02-01 22:29:38
property装饰器 一、什么是property特性 property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接使用 # ############### 定义 ############### class Foo: def func(self): pass # 定义property属性 @property def prop(self): pass # ############### 调用 ############### foo_obj = Foo() foo_obj.func() # 调用实例方法 foo_obj.prop # 调用property属性 如下的例子用于说明如何定一个简单的property属性: class Goods(object): @property def size(self): return 100 g = Goods() print(g.size) 100 property属性的定义和调用要注意一下几点: 定义时,在实例方法的基础上添加 @property 装饰器;并且仅有一个self参数 调用时,无需括号 二、简单示例 对于京东商城中显示电脑主机的列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据 这个分页的功能包括:

Python 中类的作用域问题

假装没事ソ 提交于 2020-02-01 13:18:41
今天写一段小代码的时候犯傻了,我试图在类中的方法内部直接访问类中的变量,大概是这样写的: class Test: a = 1 def __init__(self): print(a) t = Test() """ NameError: name 'a' is not defined """ 很显然报了 NameError 错误,我错误地认为 init 方法里面是可以直接拿到类中定义的变量 a 的,实际上并不可以。 如大家所知,Python 的作用域查找顺序是 LEGB,即局部作用域、外部作用域、全局作用域和内置作用域,这里面并不包含 C(类作用域)。 下面引用来自《Python 学习手册》第 859 页的一段话来说明这一点: ** 尽管类能够访问外层函数的作用域,但它们不能作为类中其它代码的外层作用域:Python 搜索外层函数来访问被引用的名称,但从来不会搜索外层类。也就是说,类是一个可以访问其外层作用域的局部作用域,但其本身却不能作为一个外层作用域被访问。因为方法函数中对名称的搜索跳过了外层的类,所以类属性必须作为对象属性并使用继承来访问。** 所以在上面如果要访问到 a 的话,只能通过点号取属性访问,比如 self.__class__.a。 ** 二、属性的获取机制 ** python 中的属性获取存在一个向上查找的机制。 因此要访问类属性的方式有两种: 类名. 类属性 对象

python中的类属性和对象属性的作用域

霸气de小男生 提交于 2020-02-01 13:08:31
class Test: num=100 def __init__(self): self.age=18 test1=Test() test2=Test() print(test1.num) test1.num=200 """ 只是修改了这个对象作用域下的属性 类中的num不会发生改变 """ print(test1.num) print(Test.num) del test1.num print(test1.num) def __init__方法的作用域限制在实例化出的对象 self.age=18 这里的age属性是对象的特有属性,类访问不到 跟 p=person() p.age=18 是一样的效果 只有p能访问到这个age,person访问不到 如果person中也有这个age,是在两个区域,互不影响 除非在p中的age属性删除之后,p会向person中找相关的属性 class a: def __init__(self): self.name="a" self.age=12 self.score=23 def test(): print("类方法测试") print(a.name) """ 这里会报错,因为def __init__构造函数之内的属性只能通过 实例化对象之后,通过对象进行访问,类没有办法直接访问 如果是对象中再增加属性,或者修改属性的值,这些都跟类的属性没有关系

类属性,类方法和静态方法

人走茶凉 提交于 2020-01-31 20:40:08
类属性,类方法和静态方法 1.类属性 类方法 类属性:针对类对象定义的属性 使用赋值语句在class关键字下可以定义类属性 类方法:针对类对象定义的方法 在类方法内部可以直接访问类属性或者调用其他的类方法 class Toy(object): # 使用赋值语句 记录所有的玩具数量 count = 0 def __init__(self,name): self.name = name # 让类属性+1 Toy.count += 1 @classmethod def show_toy_count(cls): print('玩具对象的数量 %d' %(cls.count)) # 创建玩具对象 toy1 = Toy('乐高') toy2 = Toy('泰迪熊') # 调用类方法 Toy.show_toy_count() 2.静态方法 静态方法:通过类名调用静态方法,不需要创建对象,直接就可以调用 class Cat(object): @staticmethod def call(): print('喵喵~') # 静态方法:通过 类名. 调用静态方法 # 不需要创建对象 直接就可以调用 Cat.call() 来源: CSDN 作者: _nigar 链接: https://blog.csdn.net/nigar_/article/details/104119654

Python学习笔记(九)之面向对象编程(下)

僤鯓⒐⒋嵵緔 提交于 2020-01-31 19:32:55
目录 0. 附上Python面向对象学习笔记上的链接: Python学习笔记(八)之面向对象编程(上) 1. 引言 2. 继承和多态 2.1 继承 2.1.1 继承的含义 2.1.2 继承实例 2.2 多态 2.2.1 多态的含义 2.2.2 多态实例 3. 实例属性和类属性 0. 附上Python面向对象学习笔记上的链接: Python学习笔记(八)之面向对象编程(上) 1. 引言 上一节类比java的面向对象学习了Python中的面向对象的基础知识,以及在最后的总结中比较了一些Python和java中的面向对象的不同。 在java的学习中我了解到, 数据封装、继承和多态是面向对象的三大特点 ,所以在这一章节中,我将继续学习Python的继承和多态的语法和技巧,更加深入的了解Python的面向对象,依旧是类比java学习。 两天没有学习Python面向对象的知识了,所以现在稍微回顾一下上面学到的内容。 首先是定义一个类,可以通过 class 类名(继承自) 的方式定义一个新类; 接着自然是写一个构造函数了,所以 __init__ 函数登场了,在类的的函数中,默认会传入参数 self ,因为Python的构造函数只能有一个,所以参数的传入要比较谨慎的书写,可以通过 关键字参数 传入参数的方式来实现。 再者就是 数据封装 这个面向对象的三大特点之一

property简单知识点

心已入冬 提交于 2020-01-31 00:55:12
property属性 除去类属性和实例属性外另外一种属性 普通的方法前边加了一个property之后,接下来就由一个特殊功能的体现 在调用 proop的方法的时候就变了,仔细观察上图中最后一行,发现调用prop方法没有写(),这样的形式一般返回一个值。 这就是property,而且返回的值是代码,foo_obj.pop的返回值 这就是property属性 property给人的感觉是明明调用函数但是却看上去访问了一个属性。所以可读性上来讲size的可读性更高。方便 property有个特点,就是例如上图中装饰只有一个size,不能再多。 以下的两个例子说明 以上图片说明了property属性调用size的时候其实调用的返回值int类型的100 这次多加了一个参数,明显也出错 所以调用property属性的时候不能多写参数。 创建propery属性的方式 创建property属性的方式---- 装饰器 创建property属性的方式— -类属性 一、创建property属性的方式----装饰器 @property 底下的函数得有返回值 经典类和新式类不一样,如果是经典类python2只用property一种方式 如果是新式类的话就可以用property三种方式以下三种方式 在python3新式类中的三种方式 去price的值 设置rice的价格 删除价格的值 上图中obj.price

python 08属性和方法

落爺英雄遲暮 提交于 2020-01-30 19:00:44
私有属性:在属性名前加__,外部无法访问。私有属性都在init中添加。 私有方法:在方法名前加__. 类属性:直接在类中创建的属性就叫类属性。 实例属性(对象属性):在init方法中定义的属性。 注:可以使用类名、实例名访问类属性,但只能使用实例名访问实例属性,不能使用类名访问实例属性。 类方法:是类对象所拥有的⽅法,需要⽤修饰器 @classmethod 来标识其为类⽅法,第⼀个参数必须是类对象,⼀般以 cls 作为第⼀个参数。类方法可以修改类属性,获取类属性。 静态方法:使用@staticmethod,通过类直接调用,不需要创建对象。 class Person(object): #私有属性 type = "yellow" #对象方法 def __init(self): #实例属性 self.name = "tom" # 对象方法 def show(self): print("对象") #类方法 @classmethod def show_msg(cls): print(cls) print("类方法") #使用类方法修改类属性 @classmethod def self_type(cls,type): cls.type = type # 使用类方法获取类属性 @classmethod def get(cls): return cls.type #静态方法

Python基础20-面向对象:静态、组合、继承与派生、多态、封装、反射、内置attr方法等

无人久伴 提交于 2020-01-28 17:01:22
目录 静态 静态属性@property 类方法@classmethod 静态方法@staticmethod 组合 继承与派生 继承与派生 继承顺序 在子类中调用父类方法与super 多态 封装 反射 模块的动态导入 内置的attr方法 带双下户线的attr方法__setattr__、__getattr__、__delattr__ __getattr__方法的牛逼用法 继承方式完成包装 静态 静态属性@property 以类Room为例,Room类里面存储了width、length、height属性,面积、体积都是通过这些属性计算出来的,没有必要再存一份面积、体积。使用装饰器@property可以把有返回值的方法变成属性一样,这样减少了冗余,对调用者来说就像直接访问属性一样方便。这就是静态属性。 class Room: def __init__(self, name, owner, width, length, height): self.name = name self.owner = owner self.width = width self.length = length self.height = height pass @property def area(self): """ 计算面积 :return: 面积 """ return self.width * self

类属性和类方法

元气小坏坏 提交于 2020-01-27 13:51:42
01. 类的结构 1.1 术语 —— 实例 使用面相对象开发, 第 1 步 是设计 类 使用 类名() 创建对象, 创建对象 的动作有两步: 1) 在内存中为对象 分配空间 2) 调用初始化方法 __init__ 为 对象初始化 对象创建后, 内存 中就有了一个对象的 实实在在 的存在 —— 实例  因此,通常也会把: 创建出来的 对象 叫做 类 的 实例 创建对象的 动作 叫做 实例化 对象的属性 叫做 实例属性 对象调用的方法 叫做 实例方法 在程序执行时: 对象各自拥有自己的 实例属性 调用对象方法,可以通过 self. 访问自己的属性 调用自己的方法 结论 每一个对象 都有自己 独立的内存空间 , 保存各自不同的属性 多个对象的方法 , 在内存中只有一份 ,在调用方法时, 需要把对象的引用 传递到方法内部 1.2 类是一个特殊的对象 Python 中 一切皆对象 : class AAA: 定义的类属于 类对象 obj1 = AAA() 属于 实例对象 在程序运行时, 类 同样 会被加载到内存 在 Python 中, 类 是一个特殊的对象 —— 类对象 在程序运行时, 类对象 在内存中 只有一份 ,使用 一个类 可以创建出 很多个对象实例 除了封装 实例 的 属性 和 方法 外, 类对象 还可以拥有自己的 属性 和 方法 类属性 类方法 通过 类名. 的方式可以