20180727 (面向对象的属性 类方法和静态方法)

一.属性:将一个方法,伪装成一个属性,在代码的级别上没有本质的提升,但是可以让其看起来更合理

property:类似于bmi这种,看起来像名词,实际是需要计算的(动词),或者遇到周长或者面积这种词的时候,需要使用property装饰器来对其进行伪装

例如: 

class Person:    def __init__(self,name,weight,height):        self.name = name        self.weight = weight        self.height = height                     def bmi(self):                                 此时bmi按常理会认为他是一个名词.然而在这里确实当做动词再用,所以不太合理        return round(self.weight / self.height ** 2,2)p1 = Person("刘某某",60,1.7)print(p1.bmi())

例如:

class Person:    def __init__(self,name,weight,height):        self.name = name        self.weight = weight        self.height = height    @property                      ====>此时使用这个装饰器的主要作用是将bmi方法伪装成一个属性,就是把它当做一个名词来看    def bmi(self):        return round(self.weight / self.height ** 2,2)p1 = Person("刘某某",60,1.7)print(p1.bmi)

属性的修改:

例如:

class Person:    def __init__(self,name,age):        self.name = name        self.__age = age    @property    def age(self):        return self.__age    @age.setter                   =====>这个装饰器在这里是可以修改年龄这个对象值    def age(self,a1):        print(a1)p1 = Person("刘某某",22)p1.age = 21    (修改年龄)

属性的删除:

例如:

class Person:    def __init__(self,name,age):        self.name = name        self.__age = age    @property    def age(self):        return self.__age    @age.setter    def age(self,a1):        print(a1)    @age.deleter                 =====>这个装饰器在这里是可以删除年龄这个属性    def age(self):        del self.__agep1 = Person("刘某某",22)p1.age = 21del p1.age                   (删除年龄这个属性)print(p1.__dict__)

二.类方法

类方法:通过类名调用的方法,类方法中第一个参数约定俗成cls,python自动将类名(类空间)传给cls

普通方法与类方法的区别:

例如:

class A:    def func(self):        print(self)        普通方法  : 由对象调用,至少一个self参数,执行普通方法的时候,自动将调用该方法的对象赋值给self    @classmethod    def func(cls):          类方法   :  由类调用,至少一个cls参数,执行类方法的时候,自动将调用该方法的类赋值给cls        print(cls) a1 = A()a1.func()     对象调用方法,cls最终的到的是该类本身

类方法的应用场景

(1)类中有些方法是不需要对象参与    (只能有类名调用(对象调用)传给cls参数的也是该对象的所属)类)

例如:

class A:    name = "alex"    count = 1    @classmethod            此方法无需对象参与    def func(cls):        return cls.name + str(cls.count + 1)#A.func(111)       =====>(不要用类名去调用类里面的方法,除了类方法和静态方法)a1 = A()print(a1.func())

(2)在类中的静态变量进行改变,要用到类方法

(3)继承中,父类得到子类的类空间      (子类通过类名去执行父类中的类方法,并将本子类的类名空间传给了父类,并且可以对子类中的所有内容进行修改)
例如:

class A:    age = 12    @classmethod                    =====>类方法在这里接收到的是一个类空间,哪个类调用的,就是哪个类的类空间    def func(cls):     cls.age = 25        return cls.ageclass B(A):    age = 22a1 = B()print(a1.func())     =====>25    

例如:不通过类方法,想让父类的某个方法得到子类的类空间里面的任意值

class A:    age = 12    def func(self):        print(self)      =====>self是B类实例化的一个对象,能得到子类空间的任意值,但是只能访问,不能修改class B(A):    age = 22b1 = B()b1.func()     

三.静态方法

静态方法的好处:(1)代码块是一个整体   分类整理  是代码看起来清晰明了

        (2)复用性   减少代码量   (比如父类A下面有100个子类,这100个子类都可以调用父类A中的这个方法,还可以调用自己本类中的方法)

例如:

class A:    @staticmethod    def func():        print(666)A.func()

原文地址:https://www.cnblogs.com/lhy979/p/9378906.html

时间: 2024-10-29 14:33:24

20180727 (面向对象的属性 类方法和静态方法)的相关文章

Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法

一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强-" 什么是面向对象 面向对象就不像面向过程那样按照功能划分模块了,它所关注的是软件系统有哪些参与者,把这些参与者称为对象,找出这些软件系统的参与者也就是对象之后,分析这些对象有哪些特征.哪些行为,以及对象之间的关系,所以说面向对象的开发核心是对象 什么是类 面向对象编程的两个重要的概念:类和对象 类是

Python面向对象之类属性类方法静态方法

类的结构 实例 使用面向对象开发时,第一步是设计类: 当使用 类名() 创建对象时,会自动执行以下操作: 1.为对象在内存中分配空间--创建对象: 2.为对象的属性 设置初始值--初始化方法(init); 对象创建后,内存中就有了一个对象的实实在在的存在--实例: 因此通常也会把: 1.创建出来的对象叫做类的实例: 2.创建对象的动作叫实例化: 3.对象的属性叫实例属性: 4.对象调用的方法叫实例方法: 在程序执行时: 1.对象各自拥有自己的实例属性: 2.调用对象方法,可以通过self. 访问

python 类属性 实例属性 类方法 实例方法 静态方法(转载)

本文是转载,纯粹是为了方便后面自己查看,建议还是看原文的:http://www.cnblogs.com/dolphin0520/archive/2013/03/29/2986924.html 一.先来谈一下类属性和实例属性 在前面的例子中我们接触到的就是类属性,顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问. class people: name = 'j

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

一. 属性 属性: 将一个方法, 伪装成一个属性, 在代码的级别上没有本质的提升, 但是让其看起来很合理. @property 属性 @属性名.setter # 设置(修改) @属性名.deleter # 在内部删除 二. 类方法 @classmethod # 类方法 类方法: 通过类名调用的方法, 类方法中第一个参数约定俗称cls, python自动将类名(类空间)传给cls. 只能有类名调用(对象调用, 传给cls参数的也是该对象的所属类). 类方法的应用场景: 1. 无需对象参与. 2.

Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在python2.x中,若没指定父类,则不会以object作为基类. 2)旧式类(经典类):在定义类时,类后边括号中不用继承object类,甚至不用括号. 3)dir方法是用来查看类的内置方法. 二.私有方法和属性 1)私有属性是对象不希望公开的属性:私有方法是对象不希望公开的方法.在定义私有属性和方法时,在属

python__基础 : 类属性,类方法,静态方法

类属性  定义在类里面,方法外面的属性,一般属于这个类,如下面的 num 就是类属性: class Test: num = 0 类属性用 实例.类属性   或者 类.类属性 都可以访问, 如 a = Test()  用 a.num 可以访问 ,但是如果这个实例有一个实例属性 self.num 那么这样访问的其实是 self.num , 所以一般用 类.属性 即这样 Test.num 访问 类方法, 类方法是属于这个类的方法,定义方式为 前面加上装饰器 @classmethod 且第一个参数传递的

python的类的 静态属性 类方法 静态方法

一.静态属性 静态属性说的就是数据属性 1.定义一个房间的类,求下这个房间的面积 class Room: def __init__(self,name,ower,width,length,heigh): self.Name=name self.Ower=ower self.Width=width self.Length=length self.Heigh=heigh r1=Room("厕所","北爷",2,2,20000)#实例化出来一个实例r1,实例化的过程就是执

静态属性、类方法、静态方法

静态属性 静态属性就是数据属性,在函数属性上加装饰器@property,感官会认为是把函数属性转化成数据属性,运用类函数方法不需要加() 封装:把背后的操作逻辑隐藏起来,跟实例绑定 class Hhj: def __init__(self,name,age,face): self.name=name self.age=age self.face=face @property def test(self): print('我是%s 年纪是%s 长得%s' %(self.name,self.age,

python类:类方法和静态方法

http://blog.csdn.net/pipisorry/article/details/49516185 面相对象程序设计中,类方法和静态方法是经常用到的两个术语.逻辑上讲:类方法是只能由类名调用:静态方法可以由类名或对象名进行调用.在C++中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆.在python中,方法分为三类实例方法.类方法.静态方法. @classmethod和@staticmethod 他们的使用场景并不一样.在python中,两种方法的主要区别在于参数 类内部普