
一切皆对象 封装 类的装饰器property(影藏属性) 绑定方法与非绑定方法 继承基础知识 先抽象再继承
发布日期:2021-05-08 03:56:50
浏览次数:27
分类:精选文章
本文共 2311 字,大约阅读时间需要 7 分钟。
类与对象内置的一些装饰器及功能
property
property装饰器通常与隐藏属性一起使用,用于将功能属性伪装成数据属性。通过property装饰器,可以将功能属性的函数直接伪装成数据属性的接口,从而实现属性访问的一致性。例如,BMI指数可以通过property装饰器将计算功能隐藏起来,使外部只能通过属性访问。
classmethod和staticmethod
classmethod装饰器用于将方法绑定到类上,无论是谁调用都会自动传入类本身作为参数。staticmethod装饰器则用于将方法完全脱离类和对象的绑定,作为一个普通函数来使用。例如:
class Student: n = 0 def __init__(self, name, age, gender): Student.n += 1 self.name = name self.age = age self.gender = gender def choose(self): print("hello %s" % self.name)obj1 = Student("nana", 18, "female")print(type(obj1)) #print(Student) # print(obj1.__dict__) # {'name': 'nana', 'age': 18, 'gender': 'female'}# 对象调用函数传参obj1.choose() # 对象调函数传参# 类调函数传参Student.choose(obj1) # 类调函数传参# 内置类=内置类型print(list) # l1 = list([1, 2, 3])print(type(l1)) # print(l1) # [1, 2, 3]# 对象绑定方法l1.append(4) # [1, 2, 3, 4]list.append(l1, 4) # [1, 2, 3, 4]
继承
继承是一种通过共享父类属性和功能来实现代码重用的一种方式。通过抽象,再继承,可以将类与类之间的共同特性提取出来,形成父类,使子类只需要专注于自身独有的功能。例如:
class People: school = '清华大学' def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = ageclass Student(People): def choose_course(self): print('%s正在选课' % self.name)class Teacher(People): def teach(self): print('%s正在教学' % self.name)
通过继承,Student和Teacher共享了People类中的属性和方法,从而实现了代码的简洁和重用。
绑定方法与非绑定方法
在类中定义的函数可以分为绑定方法和非绑定方法:
- 绑定方法:绑定给对象或类,调用时会自动传入参数。
- 非绑定方法:脱离类和对象,作为普通函数使用。
例如:
class Mysql: def __init__(self, host, port): self.host = host self.port = port @classmethod def from_conf(cls): return cls(settings.HOST, settings.PORT) @staticmethod def create_id(): return uuid.uuid1()# 绑定方法print(Mysql.from_conf()) # 类方法,自动传入cls# 非绑定方法print(Mysql.create_id()) # 静态方法,作为普通函数使用
隐藏属性与封装
通过隐藏属性,可以将对象的内部数据和功能属性封装起来,控制对属性的访问。例如:
class People: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter def name(self, value): if not isinstance(value, str): raise Exception("名字必须是字符串类型") self.__name = value @name.deleter def name(self): print("不允许删除")p1 = People("nana")print(p1.name) # 查看名字p1.name = "lala" # 修改名字del p1.name # 删除名字
通过隐藏属性和property装饰器,可以实现属性的安全性和一致性设计。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年05月09日 14时11分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java教师教学质量评估系统(ssm)
2023-01-24
java教师管理系统(ssm)
2023-01-24
java教师管理系统(ssm)
2023-01-24
java教师绩效考核过程管理系统(ssm)
2023-01-24
java教师课堂助手app(ssm)
2023-01-24
java教师课程管理与教学辅助系统(ssm)
2023-01-24
java教研室采购管理系统(ssm)
2023-01-24
java教育机构管理(ssm)
2023-01-24
java教育质量测评系统(ssm)
2023-01-24
java教育辅导班信息网(ssm)
2023-01-24
BurpSuite实战九之使用Burp Repeater
2023-01-24
Ceph企业级实战
2023-01-24
Ceph对象存储详解
2023-01-24
Cisco防火墙配置实战
2023-01-24
DDNS动态域名无固定IPSEC配置实战
2023-01-24
DELL笔记本UEFI+GPT安装window10与Ubuntu双系统
2023-01-24
Docker+Jenkins+GIT CICD持续化集成实战
2023-01-24
Dockerfile 指令详解
2023-01-24
Docker安装MongoDB(附Docker虚拟机环境与MongoDB客户端连接工具)
2023-01-24
DRBL+Clonezilla全自动批量安装操作系统
2023-01-24