一切皆对象 封装 类的装饰器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装饰器,可以实现属性的安全性和一致性设计。

上一篇:Win10下安装spark(本地模式)_windows
下一篇:docker容器平台快速更换jar包并打成镜像

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年05月09日 14时11分33秒