【学习笔记】--- 老男孩学Python,day18 面向对象------ 属性,类方法,静态方法
属性
属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理.
应用场景: 类中 要用名词时候可以用@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 面向对象------ 属性,类方法,静态方法的更多相关文章
- python面向对象 : 属性, 类方法, 静态方法
一. 属性 属性: 将方法伪装成一个属性,代码上没有什么提升,只是更合理. property应用 : 类似于bmi这种,area,周长.... 需要用到计算的. # 求BMI体质数:BMI = 体 ...
- 【python学习笔记】9.魔法方法、属性和迭代器
[python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...
- 学习笔记《简明python教程》
学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...
- Flutter学习笔记(8)--Dart面向对象
如需转载,请注明出处:Flutter学习笔记(7)--Dart异常处理 Dart作为高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式,基于mixin的继承方式是指:一个类可以继承自多 ...
- DuiLib学习笔记(二) 扩展CScrollbar属性
DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:s ...
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
随机推荐
- 关于popup
p1.html:点击添加按钮,开启窗口,打开p2.html,填写数据后返回p3.html,p3.html将数据回传到p1.html,且关闭自己 p1.html: <!DOCTYPE html ...
- Python网络通信
day26 网络通信 参考: http://www.cnblogs.com/yuanchenqi/articles/5692716.html 男生是client端,字条是socket(sk),通过sk ...
- 把本地git仓库的项目上传到远程仓库
之前在学校实验室服务器上建了一个git远程仓库,存放我写的express项目代码.后来由于出去实习,就无法访问那个远程仓库了,因为它在校园网内. 还好我的笔记本中有这个项目完整的本地仓库,于是我就试着 ...
- WPF一步步开发XMPP IM客户端2:主窗体设计
UI设计方案: 在设计窗体UI之前,先要了解一些主要的接口和帮助类: 对于主窗的左侧列表,容器内的Item必须实现ILeftItem的接口,比如联系人.系统消息.群等,接口包含点击事件 public ...
- 【NOIP2013】转圈游戏 快速幂
题目大意:给你四个整数$n,m,k,x$,求$(x+m\times 10^k)%n$. 直接一个快速幂就好了,注意开$long\ long$. #include<bits/stdc++.h> ...
- Oracle 数据库维护管理之--dbms_lock
1.查询相关的v$视图,但是提示表或视图不存在解决办法 原因是使用的用户没有相关的查询权限导致 解决办法: grant select any dictionary to 用户; --这 ...
- (转)python学习笔记4--数字类型与操作符
原文:https://blog.csdn.net/lemonwyc/article/details/37558269 1. 同时赋值(Simultaneous Assignments) python支 ...
- (转)mysql自增列导致主键重复问题分析
mysql自增列导致主键重复问题分析... 原文:http://www.cnblogs.com/cchust/p/3914935.html 前几天开发童鞋反馈一个利用load data infile ...
- rails中 flash 和 flash.now的区别
Flash[:notice]’s message will persist to the next action and should be used when redirecting to anot ...
- cygwin 安装.
在线安装, http://www.cygwin.com/ 64位的,下载安装. 先装的低配的,只有几个组件装了,不然全部装太大,下次需要再装... binutils gcc gdb windows ...