绑定,非绑定方法,隐藏属性,property装饰器,继承
绑定方法
# 绑定方法:绑定给类的,绑定给对象的 class Student(): school = 'SH' def __init__(self, name, age): self.name = name self.age = age def tell_info(self, v): print('name:%s, age: %s, v:%s' % (self.name, self.age, v)) stu = Student('tom', 19) # 对象来调用方法, 绑定给对象的方法由对象来调用,特殊之处:把对象自己当成第一个参数传递到方法里面 stu.tell_info(10) # stu.tell_info(stu) # 绑定给类的方法 # ip port class Mysql(): def __init__(self, ip, port): self.ip = ip self.port = port # 绑定给类的方法 @classmethod def from_func(cls): # Oracle() return cls('127.0.0.1', '3306') def func(self): self.__class__ # obj = Oracle('127.0.0.1', 3306) # # obj1 = obj.from_func() # print(obj1) # 类调用 Mysql.from_func() # Mysql.from_func(Mysql)
非绑定方法
# 即不绑定给类,也不绑定给对象 class People(): def __init__(self, name, age): self.name = name self.age = age self.id = self.create_id() @staticmethod def create_id(): import uuid return uuid.uuid4() obj = People('tom', 19) # res=obj.create_id() # obj.create_id(obj) # print(res) print(People.create_id()) # import uuid # print(uuid.uuid4()) ''' 非绑定方法:静态方法 1. 加一个装饰器:@staticmethod 2. 函数已经变成普通函数 3. 对象和类都可以调用, '''
# 隐藏属性是有应用场景的 1. 如何隐藏? 2. 为什么要隐藏? class Student(): __country = 'CHINA' # _Student__country def __init__(self, name, age): self.__name = name # _Student__name self.age = age def __func(self): # _Student__func print('from func') def get_country(self): return self.__country # self._Student__country def set_country(self, v): if not type(v) is str: print('不是str') return self.__country = v print(Student.__dict__)
property装饰器
class Student(): __country = 'CHINA' # _Student__country def __init__(self, name, age): self.__name = name # _Student__name self.age = age def __func(self): # _Student__func print('from func') # 把函数伪装成属性 @property def country(self): return self.__country # self._Student__country @country.setter def country(self, v): if not type(v) is str: return self.__country = v @country.deleter def country(self): print('不能删') stu = Student('tom', 18) # print(stu.country) # stu.country = 'xxx' # print(stu.country) del stu.country
继承
1. 什么是继承?
继承就是新建类的一种方式,新建出来的类称为子类或者叫派生类,被继承的类称为父类或者基类
子类可以遗产父类的属性
2. 为什么要用继承?
类解决了对象与对象之间的代码冗余问题
继承解决类与类之间的代码冗余问题
3. 怎么用继承?
经典类:没有继承object类的子子孙孙类都是经典类
新式类:继承了object类的子子孙孙类都是新式类
'''只有在python2中才区分经典类和新式类,在python3中都是新式类'''
class People(): school = 'SH' def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender class Student(People): def __init__(self, name, age, gender, course=None): if course is None: course = [] People.__init__(self, name, age, gender) # 指名道姓的调用 self.course = course def choose_course(self): print('aaaa') class Teacher(People): def __init__(self, name, age, gender, level): People.__init__(self, name, age, gender) self.level = level def score(self): print('打分') stu = Student('tom', 19, 'male') tea = Teacher('ly', 20 ,'female', 10) print(stu.name) print(stu.school) print(tea.school)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现