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

一. 属性    属性: 将一个方法, 伪装成一个属性, 在代码的级别上没有本质的提升, 但是让其看起来很合理.    @property    属性    @属性名.setter  # 设置(修改)    @属性名.deleter  # 在内部删除

二. 类方法    @classmethod  # 类方法    类方法: 通过类名调用的方法, 类方法中第一个参数约定俗称cls, python自动将类名(类空间)传给cls.    只能有类名调用(对象调用, 传给cls参数的也是该对象的所属类).    类方法的应用场景:        1. 无需对象参与.        2. 对类中的静态变量进行修改, 用类方法        3. (1)在父类中类方法得到子类的类空间, 为所欲为,           (2)继承中, 父类得到子类的类空间子类类名调用父类的类方法, 将我子类的类名传给父类,              这个方法中能得到子类的任何东西, 还能修改

三. 静态方法    @staticmethod    静态方法的优点:        1. 代码块, 清晰        2. 复用性

1. 属性
# 属性的初识
class Food:

    def __init__(self,name,apple,banana):
        self.name = name
        self.__apple = apple
        self.__banana = banana

    @property     # 装饰器函数,内置函数,
    def func(self):
        return "喜欢吃 %s 和 %s" % (self.__apple,self.__banana)
    print(111)

f1 = Food("函数",‘苹果‘,‘香蕉‘)

ret = f1.func    # 是装饰器函数,调用函数的时候函数名就不用加括号
print(ret)
f1.name = "名字"    # 在外面,为对象(f1)封装一个属性,覆盖前面的封装的属性
print(f1.name)

# 属性的修改和删除
class Food:

    def __init__(self,num):
        if type(num) is int:
            self.__num = num
        else:
            print(‘输入的数字有误‘)

    @property     # 装饰器函数,内置函数,
    def func(self):
        return self.__num

    @func.setter
    def func(self,num):
        if type(num) is int:
            self.__num = num
        else:
            print(‘输入的数字有误‘)

    @func.deleter
    def func(self):
        del self.__num  # 在内部删除

f1 = Food(90)
ret = f1.func
print(ret)

f1.func = 40        # 修改
print(f1.func)

del f1.func # 删除
# print(f1.func)  # 以删除,会报错

2. 类方法

class A:
    def func(self):     # 普通方法
        print(self)

    @classmethod        # 类方法
    def func1(cls):
        print(cls)  # 类空间

a1 = A()
a1.func()
A.func(a1)  # 普通的方法

a1.func1()  # 对象调用类方法,cls 得到的是类本身
A.func1()   # 类方法可以不要对象参与
# 类名调用类方法,python自动将类名(类空间)传给cls.

class A:
    name = "名字"

    @classmethod        # 类方法
    def func(cls):     # 此方法无需对象参与
        return cls.name

print(A.func())    # 直接执行,无需对象
ret = A()
print(ret.func())

class A:
    name = "名字"
    num = 2

    @classmethod        # 类方法
    def func1(cls):     # 此方法无需对象参与
        # print(cls)
        # 对B类的所有的内容可以进行修改.
        print(cls.num)  # 到子类找值
        B.num = 23      # 修改子类的值
        print(cls.num)
        return cls.name
    def func2(self):
        print(self)

class B(A):
    num = 20
# B.num = 21      # 修改B类中的num
print(B.func1())       # 区别:子类类名调用父类的类方法,将我子类的类名传给父类,
                            # 这个方法中能得到子类的任何东西,还能修改
# B.func2(2)    # 无需对象
b1 = B()
# b1.func2()

# 不通过类方法,想让我的父类的某个方法得到子类的类空间里面的任意值.

3. 静态方法

class A:
    name = ‘函数‘
    num = 12
    @staticmethod           # 静态方法
    def func(): # 不需要self和cls
        print(‘静态方法‘)
        return A.name + str(A.num)

print(A.func())    # 不用创建对象,也就是实例化对象,所以很节省空间
 

 



原文地址:https://www.cnblogs.com/Pengdachui-1/p/11841077.html

时间: 2024-10-10 06:13:52

python 属性,类方法和静态方法的相关文章

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

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

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

一.属性:将一个方法,伪装成一个属性,在代码的级别上没有本质的提升,但是可以让其看起来更合理 property:类似于bmi这种,看起来像名词,实际是需要计算的(动词),或者遇到周长或者面积这种词的时候,需要使用property装饰器来对其进行伪装 例如: class Person: def __init__(self,name,weight,height): self.name = name self.weight = weight self.height = height def bmi(s

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

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

Python的类方法,静态方法,实例方法的区别

Python的方法并不想C#,Java这些编译性语言那样严格的区分静态方法和实例方法.也就是说Python的静态方法,类方法和实例方法只是在调用上有区别,类型和实例都可以调用.一般规则如下:A:实例方法:没有@classmethod和@staticmethod标记的方法是实例方法.假设这个有n个比传参数,类型调用的时候需要给n个参数传参.而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身:因为有这个规定,所以实例方法如果没有参数,则实例是无法调用的,但类型可以调用.B:类方

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,实例化的过程就是执

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

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

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

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

python类:类方法和静态方法

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

Python学习手册之数据封装、类方法和静态方法

在上一篇文章中,我们介绍了 Python 的内部方法.操作符重载和对象生命周期,现在我们介绍 Python 的数据封装.类方法和静态方法.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10017357.html 数据封装面向对象编程的一个关键部分是封装,它涉及将相关变量和函数打包到一个简单易用的对象(类的一个实例)中.一个相关的概念是隐藏数据,它隐藏了类的实现细节,并提供一个干净的标准接口.在其它编程语言中,通常是通过私有方法和属性完成的,这些方法和属