内容概要
小练习案例
绑定方法
非绑定方法(静态方法)
如何隐藏属性
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)