一:绑定方法

1.绑定给对象的方法
class Person:
# 绑定给对象的方法 对象调用 自动把对象传入
def print_name(self):
print(self.name)
print('对象的绑定方法') p = Person()
p.name = 'lqz' # 对象来调用对象的绑定方法 自动将对象传入
p.print_name() 输出结果:lqz 对象的绑定方法

2.绑定给类的方法
@classmethod是一个装饰器 绑定给类的方法 类来调用 自动把类传入

@classmethod
def test(cls):
print(cls) 输出结果 <class '__main__.Person'>
print(cls.__name__) 类名的字符串现实 Person
print('类的绑定方法') @classmethod
def create_obj(cls):
return cls() 类来调用类的绑定方法
Person.tese() 如果通过类,调用类的绑定方法,获得对象
直接通过类做一件事,就用类的绑定方法
p = Person()
p = Person.create_obj()

3.非绑定方法之静态方法
@staticmethod 静态方法 非绑定方法 它不绑定给任何人 它就是一个普通的函数 类和对象都可以来调 但不把类和对象自动传进来

=
class Student():
school = 'SH'
def __init__(self, name, age):
self.name = name
self.age = age @staticmethod 静态方法
def create_id(): 这里就不需要传self参数
import uuid uuid模块就是随机生成一个随机数的
return uuid.uuid4() stu = Student('ly', 18) 静态方法,不绑定给任何人,谁都可以来调,就是个普通函数,有几个值就传几个值 print(stu.create_id()) 这是可以生成一个随机数
print(Student.create_id()) 用类调用同样可以执行生成一个随机数

二,隐藏属性
1.如何隐藏属性
如何隐藏属性?
1.在类定义阶段,发生了语法上的变形_类名_属性名
2.隐藏对外隐藏 不对内隐藏
3.只有在定义阶段发生变形,其他情况都不发生变形
为什么要隐藏?
1.类里面隐藏属性,类外部可以使用 但是目的不是为了让外部使用的,类外部要2.是想用,在类内部开放接口进行访问
可以达到对外部数据的严格控制
隐藏属性实列:

class Student():
__school = 'SH' # _Student__school =>_类名__属性名 # 属性前面两个下划线隐藏 def __init__(self, name, age):
self.__name = name
self.age = age def __tell_info(self): # _Student__tell_info
print('name:%s, age: %s' % (self.__name, self.age)) # 获取隐藏属性
def get_school(self):
return self.__school # self._Student__school # 修改隐藏属性
def set_school(self, v):
if type(v) is not str: # 限制改隐藏属性必须要字符串 if isinstance(v, str): 一样
print('数据类型不合法')
return
self.__school = v
stu = Student('ly', 18)

print(stu.schoole)  # 属性隐藏 取值 会报错
print(stu.__school) # 报错 查看属性名称空间
print(Student.__dict__) 取值隐藏属性
print(stu._Student__school) # 取隐藏属性 结果:SH 方法内 取 隐藏属性
print(stu.get_school()) # 输出结果:SH 只有在类定义阶段发生变形,其他情况都不发生变形了
stu.__x = 'x'
print(stu.__x) # 输出结果:x 将name隐藏了 取值报错
print(stu.name) # 报错 查看对象名称空间
print(stu.__dict__) # 输出结果:{'_Student__name': 'ly', 'age': 18} 调用修改隐藏属性方法
stu.set_school('ly')
print(stu.get_school())

三,property 装饰器
property装饰器基本使用
分为:
1.@property 取值
2.@name.setter 修改
3.@name.deleter 不能删除 name 是根据自己定制统一要求
修改属性必须配合使用
class Student():
__school = 'SH' _Student__school =>_类名__属性名 属性前面两个下划线隐藏 def __init__(self, name, age):
self.__name = name
self.age = age def __tell_info(self): _Student__tell_info
print('name:%s, age: %s' % (self.__name, self.age)) @property 把方法伪装成属性
def name(self):
return "name:%s" % self.__name 只要加了property装饰器 就可以共同命名 修改属性名
@name.setter
def name(self, v):
if type(v) is not str: 判断是否为字符串
print('数据类型不合法')
return
self.__name = v
不让删除
@name.deleter
def name(self):
print('不让删')
拿到name
stu = Student('ly', 18) 不使用property装饰器前,调用方法
print(stu.name()) 输出结果: ly property装饰器可以让调用方法不使用括号()
print(stu.name) 输出结果: name:ly 修改属性
加了property装饰器 和name.setter装饰器 才能修改
stu.name = 'x'
print(stu.name) 输出结果: x 删除属性
del stu.name 结果:不让删

绑定方法和隐藏属性之property装饰器的更多相关文章

  1. 面向对象(四)--绑定方法与非绑定方法(classmethod、staticmethod装饰器)

    一.绑定方法与非绑定方法 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): (1)绑定给对象的方法:在类内部定义的函数(没有被任何装饰器修饰的)默认就是绑定给对象用的. (2)绑定 ...

  2. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  3. [转载]Python使用@property装饰器--getter和setter方法变成属性

    原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和sette ...

  4. python staticmethod,classmethod方法的使用和区别以及property装饰器的作用

    class Kls(object): def __init__(self, data): self.data = data def printd(self): print(self.data) @st ...

  5. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

  6. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  7. Python 利用@property装饰器和property()方法将一个方法变成属性调用

    在创建实例属性时,如果直接把实例属性暴露出去,虽然写起来简单,但是存在一些风险,比如实例属性可以在外部被修改. 为了限制外部操作,可以通过一个set_score()方法来设置成绩,再通过一个get_s ...

  8. python中@property装饰器的使用

    目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...

  9. 面向对象之封装 及@property装饰器使用

    目录 封装 1.封装的定义 2.封装的目的: 3.封装的三种方式 4.封装的优点 5.访问限制(封装) @property 装饰器 属性property底层实现 封装 1.封装的定义 将复杂的丑陋的, ...

随机推荐

  1. Python实现北邮人论坛模拟登录

    推荐去我的博客里查看这篇文章,效果更佳: http://fuxuemingzhu.cn/2017/08/12/byrbbs-login/ 模拟登录北邮人论坛可能是每个学着写爬虫的北邮人必备技能了.在网 ...

  2. 【LeetCode】658. Find K Closest Elements 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/find-k-c ...

  3. 【LeetCode】454. 4Sum II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...

  4. CapstoneCS5212|DP to VGA|CS5212设计电路方案

    CS5212功能概述 CS5212是一款DisplayPort端口到VGA转换器,它结合了DisplayPort输入接口和模拟RGB DAC输出接口.嵌入式单片机基于工业标准8051核心. CS521 ...

  5. bat文件调用cmd命令批量提取文件夹中的文件名(批量修改文件扩展名)

    前言: 在平时的工作中,经常需要批量统计文件和数据,如果逐个统计的话太耗时,而且容易出错那么有没有什么快速的方法呢,这里给大家介绍一种简单高效的方法. 方法: 1.打开CMD命令: 按下 Ctrl+R ...

  6. JavaScript交互式网页设计 • 【第7章 jQuery操作 DOM】

    全部章节   >>>> 本章目录 7.1 DOM 对象和 jQuery 对象 7.1.1 DOM 对象 7.1.2 jQuery 对象 7.1.3 jQuery 对象和 DOM ...

  7. Java面向对象程序设计作业目录(作业笔记)

    持续更新中............. 我的大学笔记>>> 第1章 面向对象 >>> 1.1.5 编写Java程序,创建Dota游戏中的防御塔类,通过两个坐属性显示防 ...

  8. 物联网大赛 - Android学习笔记(二)Andriod 应用界面编程

    学习目标: Android的程序界面和View组件 View组件和ViewGroup组件 常见的布局管理器 文本框组件TextView和EditView 按钮组件Button 和ImageButton ...

  9. 关于linux的一点好奇心(一):linux启动过程

    一直很好奇,操作系统是如何工作的?我们知道平时编程,是如何让代码跑起来的,但那些都是比较高层次的东西.越往后,你会越觉得,像是空中楼阁,或者说只是有人帮你铺平了许多道理,而你却对此一无所知. 1. 操 ...

  10. Python原生数据结构增强模块collections

    collections简介 python提供了4种基本的数据结构:list.tuple.dict.set.基本数据结构完全可以hold住所有的场景,但是在处理数据结构复杂的场景时,这4种数据结构有时会 ...