python 绑定和非绑定 隐藏属性
2021/12/4 11:16:51
本文主要是介绍python 绑定和非绑定 隐藏属性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
内容概要
- 案例
- 绑定方法
- 非绑定方法(静态方法)
- 如何隐藏属性
- property装饰器
内容详细
案例
题目: 1. 定义一个类,产生一堆对象 2. 统计产生了多少个对象 '''思路:定义一个计数器,每产生一个对象,计数器加1''' class Student(): school = 'SH' count = 0 # 专门用来计数 def __init__(self, name, age): # self => stu => {'name':'ly', 'age': 18, 'count':1} # self => stu1 => {'name':'ly1', 'age': 18, 'count':1} # self => stu2 => {'name':'ly2', 'age': 18, 'count':1} self.name = name self.age = age # self.count = self.count + 1 # Student.count += 1 # self.__class__ # Student self.__class__.count += 1
绑定方法
绑定方法分为2种: 1. 绑定给对象的 class Student(): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender # 绑定给对象的方法,对象来调用,会把自己当成第一个参数传到函数里面self def tell_info(self): print('name: %s,age:%s, gender:%s' % (self.name, self.age, self.gender)) stu = Student('ly', 18, 'male') # print(stu.name) stu.tell_info() # stu.tell_info(stu) 2. 绑定给类的 class Mysql(): def __init__(self, ip, port): self.ip = ip self.port = port @classmethod # 该方法绑定给类了,以后有类来调用,会自动把类名当成第一个参数传过来,cls def from_conf(cls): # cls => Oracle # obj = Oracle(settings.IP, settings.PORT) obj = cls(settings.IP, settings.PORT) return obj Mysql.from_conf()
非绑定方法
# 既不绑定给类,也不绑定给对象 class Student(): school = 'SH' def __init__(self, name, age): self.name = name self.age = age @staticmethod # 静态方法 def create_id(): import uuid return uuid.uuid4() stu = Student('ly', 18) # print(stu.create_id()) # print(Student.create_id()) print(stu.create_id())
如何隐藏属性
# 1. 如何隐藏 # 1. 如何隐藏 ''' 1. 在类定义阶段,发生了语法上的变形_类名__属性名 2. 隐藏对外不对内 3. 只有在类定义阶段发生变形,其他情况都不发生变形了 为什么要隐藏: 类里面的隐藏属性, 类外部可以使用,但是目的不是让类外部使用的,类外部要是想用,在类内部开放接口进行访问 可以达到对外部数据的严格控制 ''' 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: print('数据类型不合法') # if isinstance(v, str): return self.__school = v # 2. 为何隐藏
property装饰器
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 @name.setter def name(self, v): if type(v) is not str: print('数据类型不合法') # if isinstance(v, str): return self.__name = v @name.deleter def name(self): print('不让删') stu = Student('ly', 18) print(stu.get_name()) stu.name = 123 print(stu.name) del stu.name # 练习 class Bmi(): def __init__(self, height, weight): self.height = height self.weight = weight @property def get_bmi(self): return self.weight / (self.height ** 2) bmi = Bmi(1.8, 70) print(bmi.get_bmi) # 了解 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_name(self): return "name:%s" % self.__name def set_name(self, v): if type(v) is not str: print('数据类型不合法') # if isinstance(v, str): return self.__name = v def del_name(self): print('不让删') # 了解 name = property(get_name, set_name, del_name) stu = Student('ly', 18) # print(stu.xxx) stu.name = 'aaa' print(stu.name)
这篇关于python 绑定和非绑定 隐藏属性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04Python外包有哪些常见的主要库-icode9专业技术文章分享
- 2024-10-02基于深度学习的钢铁缺陷检测系统(yolov8、注意力机制、PyQt5界面、Python)
- 2024-10-01怎么用python搭建一个系统-icode9专业技术文章分享
- 2024-09-30Python基础入门教程
- 2024-09-30获取参数学习:Python中的基础教程
- 2024-09-30Python编程基础详解
- 2024-09-29点击加载学习:Python编程基础教程
- 2024-09-29数据科学五大Python前端库:第二部分
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础