• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
武纪亨
博客园    首页    新随笔    联系   管理    订阅  订阅
类的绑定方法与property装饰器

内容概要

  • 小练习案例
  • 绑定方法
  • 非绑定方法(静态方法)
  • 如何隐藏属性
  • property装饰器

内容详细

小练习案例

题目:
	1. 定义一个类,产生一堆对象
     
    2. 统计产生了多少个对象
    	'''思路:定义一个计数器,每产生一个对象,计数器加1'''
        
class Student():
    count = 0

    def __init__(self, name, age):
        self.name = name
        self.age = age
        Student.count += 1


s1 = Student()
print(s1.count)
s2 = Student()
print(s2.count)
s3 = Student()
print(s3.count)

绑定方法

绑定方法分为2种:
	1.绑定给对象的
#     class Student():
#     school = 'sh'
#     country = 'china'
# 
#     def __init__(self,name,age):
#         self.name = name
#         self.age = age
#     # 绑定给对象的方法,对象来调用,会把自己当成第一个参数传到函数里面self
# 
#     def inner(self):
#         print('%s今年%s岁了' % (self.name, self.age))
# 
#     def func(self):
#         print('%s明年%s岁了'%(self.name,self.age+1))
# 
# stu = Student('henry',18)
# stu1 = Student('jason',17)
# 
# # stu.func()  # # stu.func(stu)
# stu1.inner()  # stu1.inner(stu)
	
    2.绑定给类的
# 	  class Mysql():
#     def __init__(self,ip,port):
#         self.ip = ip
#         self.port = port
# 
#     @classmethod
#     def from_conf(cls):
#         # cls => Orancle
#         # stu = Mysql(settings.I, settings.port)
#         stu = cls(settings.IP,settings.PORT)
#         return stu
# 
# 
# stu = Mysql(settings.IP,settings.PORT)
# stu1 = stu.from_conf()
# Mysql.from_conf()

非绑定方法

# 既不绑定给类 也不绑定给对象
# 	  class Student():
#     def __init__(self,name,age):
#         self.name = name
#         self.age = age
#         self.id = self.get_id()
# 
#     @staticmethod  # 静态方法
#     def get_id():
#         import uuid
#         return uuid.uuid4()
# 
# 
# stu = Student('jason',18)
# print(stu.id)
# print(Student.get_id())

如何隐藏属性

"""
隐藏属性的特点:
    1.在类定义阶段发生了形变:发生了语法上的形变_类名__属性名
    2.隐藏对内不对外
    3.只有在定义阶段发生形变,其他情况都不发生形变
为什么要隐藏:
    对内部的属性或者方法做隐藏 可以更好的限制外部使用者 要想让外部访问 在类内部定义对外部可访问的接口
    	可以达到对外部数据的严格控制
"""

# class Student():
#     __school = 'SH'
# 
#     def __init__(self,name,age):
#         self.name = name
#         self.age = age
# 
#     def set_school(self,v):
#         if type(v) is not str:
#             print('输入内容不合法')
#             return
#         self.__school = v
# 
#     def get_school(self):
#         return self.__school
# 
# stu = Student('jason',18)
# stu.set_school(1)
# print(stu._Student__school)
# print(stu.get_school())

property装饰器

# class Student():
#     __school = 'sh'
#
#     def __init__(self,name,age):
#         self.__name = name
#         self.age = age
#     @property
#     def name(self):
#         return 'name:%s' % self.__name
#
#     @name.setter
#     def name(self,v):
#         if type(v) is not str:
#             print('输入内容不合法')
#             return
#         self.__name = v
#     @name.deleter
#     def name(self):
#         print('不让删')
#
# stu = Student('jason',18)
# # print(stu.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_bim(self):
#         return self.weight / (self.height ** 2)
#
# bmi = Bmi(1.8,70)
# print(bmi.get_bim)

# 了解

# 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)
posted on 2021-12-04 00:02  Henrywuovo  阅读(44)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3