属性

属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理.

应用场景: 类中 要用名词时候可以用@property  比如,求面积,周长,平方,体脂 等运算时候

例如:   bmi是名词,最好不要作为方法名

 class Bmi:
     def __init__(self,name, weight, heigth):
         self.name = name
         self.weight = weight
         self.heigth = heigth

     def bmi(self):  #bmi是名词,最好不要作为方法名
         b = self.weight / (self.weight**2)
         print('%s的体脂数为%s' % (self.name,b))

 p1 = Bmi('张三',89,1.77)

 p1.bmi()

@property ***   
@属性名.setter **  改,增
@属性名.deleter *  删

用法:

 # 属性的修改  property 名词作方法的
 class Person:
     def __init__(self, name, age):  #2 执行__init__方法
         self.name = name
         # if type(age) is int:
         #     self.__age = age
         # else:
         #     print('你输入的年龄类型有误,请输入数字!')
         # 三元运算一下下
         self.__age = age if type(age) is int \
             else print('你输入的年龄类型有误,请输入数字!')

     @property  # 把方法伪装成一个属性  伪装到底

         return self.__age

     @age.setter  # 添加一个可以修改属性的方法 (装饰器 setter 就是改)
     def age(self, a1):  # 判断 你修改的年龄必须是数字
         # if type(a1) is int:
         #     self.__age = a1
         # else:
         #     print('你输入的年龄类型有误,请输入数字!')
         # 三元运算一下下
         self.__age = a1 if type(a1) is int \
             else print('你输入的年龄类型有误,请输入数字!')

     @age.deleter
     def age(self):
         del self.__age
         print('已删除')

 p1 = Person('张三', 20)   #1实例化一个对象
 # p1 = Person('张三','20')
 print(p1.age) # 查

 p1.age = 99  # 改:执行类中的 @ age.setter 方法
 print(p1.age)

 del p1.age

 # print(p1.age) 已删除 不存在

类方法

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

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

 a1 = A()

 a1.func()
 A.func(a1)

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

 a1 = A()
 a1.func1()  # 对象调用类方法,cls 得到的是类本身.

@classmethod
只能有类名调用(对象调用,传给cls参数的也是该对象的所属类).
使用场景:
1,无需对象参与.

 class A1:
     name = 'alex'
     count = 1

     @classmethod
     def func1(cls):  # 此方法无需对象参与
         return cls.name + str(cls.count + 1)

 # A.func1(111) 不可取
 a1 = A()
 print(a1.func1())
 print(A.func1())

2,对类中的静态变量进行修改.

 class A:
     age = 12

     @classmethod
     def func1(cls):  # 此方法无需对象参与
         # print(cls)
         # 对B类的所有的内容可以进行修改.
         print(cls.age)
         # return cls.name + str(cls.count + 1)

 class B(A):
     age = 22

 B.func1()

3,在父类中类方法得到子类的类空间,为所欲为.

 class A:
     age = 12

     def func2(self):
         print(self)  # self 子类的对象,能得到子类 空间的任意值

 class B(A):
     age = 22

 b1 = B()
 b1.func2()

静态方法

@staticmethod
# 1,代码块.清晰.
# 2,复用性.

 class A:

     @staticmethod
     def login(username, password):
         if username == 'alex' and password == 123:
             print('登录成功')
         else:
             print('登录失败...')

 A.login('alex',1234)

【学习笔记】--- 老男孩学Python,day18 面向对象------ 属性,类方法,静态方法的更多相关文章

  1. python面向对象 : 属性, 类方法, 静态方法

    一. 属性 属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理. property应用 : 类似于bmi这种,area,周长.... 需要用到计算的.   # 求BMI体质数:BMI = 体 ...

  2. 【python学习笔记】9.魔法方法、属性和迭代器

    [python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...

  3. 学习笔记《简明python教程》

    学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...

  4. Flutter学习笔记(8)--Dart面向对象

    如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...

  5. DuiLib学习笔记(二) 扩展CScrollbar属性

    DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...

  6. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  7. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...

  8. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  9. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

随机推荐

  1. 数组序列化serialize

    1,数据在网络中是以字符串形式传输,这样如果传输的是数组,首先将数组内容拼接成字符串进行发送,接收方拿到字符串,没法将其还原为数组.因此在网络传输的时候,为了保证数据类型的不丢失,先序列化,再发送. ...

  2. Kafka副本同步机制

    引用自:http://blog.csdn.net/lizhitao/article/details/51718185 Kafka副本 Kafka中主题的每个Partition有一个预写式日志文件,每个 ...

  3. Tomcat几种出错方法

    1.  Several ports (8005, 8089, 8009) required by Tomcat v8.0 Server at localhost are already in use. ...

  4. Python小白学习之路(二十二)—【生成器】

    一.什么是生成器? 生成器可以理解成是一种数据类型,特殊地是生成器可以自动实现迭代器协议其他的数据类型需要调用自己内置的__iter__方法所以换种说法,生成器就是可迭代对象 !回忆:很重要的迭代器协 ...

  5. 【bzoj4240】 有趣的家庭菜园 树状数组

    这一题最终要构造的序列显然是一个单峰序列 首先有一个结论:一个序列通过交换相邻的元素,进行排序,最少的交换次数为该序列的逆序对个数 (该结论很久之前打表意外发现的,没想到用上了.....) 考虑如何构 ...

  6. 【loj6437】 【PKUSC2018】 PKUSC 计算几何

    题目大意:给你一个m个点的简单多边形.对于每个点i∈[1,n],作一个以O点为原点且过点i的圆,求该圆在多边形内的圆弧长度/圆长. 其中n≤200,m≤500. 我们将n个点分开处理. 首先,我们要判 ...

  7. 【2018北京集训十二】 coin 矩阵快速幂

    矩阵快速幂原来还可以这么用?? 你们城里人还真会玩. 我们令$f[i][j][k]$表示总的钱数为i,当前使用的最大面值硬币的面值为$v_j$,最小为$v_k$的方案数量. 不难发现$f[i][j][ ...

  8. centos 7 初始化脚本

    #!/bin/bash # 时间: 2018-11-21 # 作者: HuYuan # 描述: CentOS 7 初始化脚本 # 加载配置文件 if [ -n "${1}" ];t ...

  9. (转) DB2 HADR

    转自http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0508luojunkai/ 原文:http://blog.cs ...

  10. Java之集合(十九)LinkedBlockingDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7494577.html 1.前言 本章介绍LinkedBlockingDeque,这是一个可选容量的有界双向链表队 ...