面向对象-clssmethod staticmethod @property

一、classmethod介绍

介绍:@classmethod修饰符我们从名称就可以知道,这是一个类方法,那么和普通的类中的方法有什么不同的

a、类方法,是由类本身调用的,无需实例化类,直接用类本身调用即可,但是要注意实例对象也可以调用类方法

b、类方法,无需要要一个self参数,这个self参数表示类的实例对象,但是他需要一个cls参数,这个参数表示类本身

c、类方法,可以调用类的属性,类的方法,类的实例对象

下面我们正常进入介绍classmethod这个修饰符

1、类方法可以由类调用,也可以由实例对象调用

class Test:#     n=1#     def func1(self):#         print(‘你好‘)#     @classmethod#     def func2(cls):#         cls.func1(object)#         cls.func3()#         return cls.n#     @classmethod#     def func3(cls):#         print(‘大帅哥‘)# a=Test.func2()# b=Test()# # b.func2()# # print(b.func2())# print(a)

运行结果:你好大帅哥1

python staticmethod 返回函数的静态方法。

该方法不强制要求传递参数,如下声明一个静态方法:

class C(object):
    @staticmethod
    def f(arg1, arg2, ...):
        ...

以上实例声明了静态方法 f,从而可以实现实例化使用 C().f(),当然也可以不实例化调用该方法 C.f()。

函数语法

staticmethod(function)

一.定义

装饰器@property
可以把方法变成属性使用
作用: 控制类内成员的获取 设置 删除
获取 @property
设置 @自定义名.setter
删除 @自定义名.deleter

返回目录

二.具体实现

返回目录

1.方法一

class MyClass():
    def __init__(self,name):
        self.name = name

   #获取
    @property
    def username(self):
        return self.name

    #设置
    @username.setter
    def username(self,val):
        self.name = val
#删除
    @username.deleter
    def username(self):
        del self.name
obj = MyClass("ONE")
# 获取
print(obj.username)

# 设置
obj.username = "two"
print(obj.username)

# 删除 del 调用删除相关的方法
del obj.username
# print(obj.username)

 

原文地址:https://www.cnblogs.com/fan-1994716/p/11634548.html

时间: 2024-11-04 13:30:58

面向对象-clssmethod staticmethod @property的相关文章

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系

先来一个实例场景,然后测试,比较,不懂的话到网上找资料: #!/usr/bin/env python #!/usr/bin/env python class Date(object):     def __init__(self,year=0,month=0,day=0):         self.year = year         self.month = month         self.day = day @staticmethod     def statictime(self

Python2.7 学习体会 @classmethod @staticmethod @property 之间的关系二

先到百度找了一下资料,引用个重点,对比昨天实例来理解: 引用:http://blog.csdn.net/carolzhang8406/article/details/6856817 在Python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表

Python类中的字段,方法,属性区别及StaticMethod, Property

类包含下列 静态属性 动态属性 静态方法 动态方法 class Province: #静态字段--属于类,调用方法类.字段名 memo = "中国23个省之一" #动态字段--属于对象,调用方式实例化对象.字段名 def __init__(self, name, capital, leader): self.Name = name self.Capital = capital self.Leader = leader #动态方法--属于对象 def sports_game(self):

python Class:面向对象高级编程 @property

看不懂,先记录 一. #!/usr/bin/env python3# -*- coding: utf-8 -*- class Student(object): @property    def score(self):        return self._score @score.setter      #setter是哪里来的??作用呢???    def score(self, value):        if not isinstance(value, int):          

迭代器与函数Python学习(四)

1.1 迭代器: 迭代的工具 1.1.1 什么是迭代: 指的是一个重复的过程,每一次重复称为一次迭代,并且每一次重复的结果是下一次重复的初始值 while True: print('=====>') l=['a','b','c'] count=0 while count < len(l): print(l[count]) count+=1   1.1.2 为什么要有迭代器? 对于序列类型:str,list,tuple,可以依赖索引来迭代取值, 但是对于dict,set,文件,python必须为

python 高级之面向对象初级

python 高级之面向对象初级 本节内容 类的创建 类的构造方法 面向对象之封装 面向对象之继承 面向对象之多态 面向对象之成员 property 1.类的创建 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 在python2.7中有两种类,一种是经典类,一种是新式类.2.7中经典类和新式类区别在于类的定义的时候在类名后面加上(object)的是新式类,否则就是经典类.经典类和新式类在继承上面有区别,之后在继承的时候会提及.但是在python3.5中,已经不区分新式类和经典类了.

Python基础-面向对象进阶

面向对象进阶 一 类中的装饰器方法  classmethod staticmethod property 1.1 property 一般情况下,方法都是动词.指某一类事物的动作 在计算圆形的周长和面积的时候,他们应该是圆形的属性,但是这里确是一个方法.这不符合python面向对象(能够完全区分属性和方法)的理念. 所以我们可以用一个装饰器去将一个属性性质的函数,装饰成一个属性.可以以调用属性的方式去调用他. from math import pi class Circle: def __init

python 全栈 python基础 (十三)匿名函数 与 内置函数

一.匿名函数  1.定义: 匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序. 2.语法格式:lambda 参数:表达式 lambda语句中,开头先写关键字lambda,冒号前是参数,可以有多个,用逗号隔开:冒号右边的为表达式,需要注意的是只能有一个表达式.由于lambda返回的是函数对象(构建的是一个函数对象),所以需要定义一个变量去接收.  3.注意点:lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值.lambda 函数不能包含命令,包含