zoukankan      html  css  js  c++  java
  • Python学习 5day__基础知识

    类的成员描述符

    在类中对成员属性进行相关操作而创建的一种方式
    get: 获取属性的操作
    set:修改或添加属性的操作
    delete:删除属性的操作

      使用property函数来使用描述符

        property()

          定义一个Person类,具有name,age两个属性,对于任意输入的姓名,我们希望都用大写保存,年龄用整数保存

    class Person():
        # 函数名称可以任意
        def fget(self):
            return self._name *2
        def fset(self, name):
            # 所有输入的姓名以大写保存
            self._name = name.upper()
        def fdel(self):
            self._name = "NoName"
    
        name = property(fget, fset, fdel, "操作" )# 对成员进行控制
    
    p1 = Person()
    p1.name = "xiao gege "
    print(p1.name)

      类的内置属性

        __dict__: 以字典的方式显示类的成员组成
        __doc__: 获取类的文档信息
        __name__: 获取类的名称,用在模块,就获得模块的名称
        __bases__:获取某个类的所有父类,以元组的形式显示

      类的内置函数举例
     1 class A(object):
     2     '''
     3     这是一个类的内置函数举例
     4     '''
     5     name = "aaa"
     6     print("qqqq")
     7 class B(A):
     8     print("我是B 我爹是A")
     9 
    10 print(A.__dict__)
    11 print(A.__doc__)
    12 print(A.__name__)
    13 print(B.__bases__)

      类的常用魔术方法

        魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发
        特征:方法名前后有两个下划线
        __init__
        __new__: 对象实例化方法
        __call__:对象当函数使用的时候触发
        __str__: 当对象被当作字符串使用时触发
        __repr__: 返回字符串,和__str__区别不大
        __getattr__: 访问一个不存在的属性时触发
        __setattr__: 队成员属性进行设置的时候触发 # 注意__setattr__中不能对属性进行赋值,否则产生死循环

     1 class Q():
     2 
     3     def __init__(self, name):
     4         print("调用了__init__")
     5         self.name = name
     6     def __call__(self):
     7         print("调用了__call__")
     8     def __str__(self):
     9         return "调用了__str__"
    10     def __getattr__(self, item):
    11         print("调用了__getattr__")
    12     def __setattr__(self, name, value):
    13         print("调用了__setattr__")
    14         super().__setattr__(name,value)    # 防止死循环,可以调用父类魔法函数
    15 
    16 q = Q("xiaogege")
    17 q()        # 对象当函数使用,,触发__call__
    18 print(q)   # 对象当字符串
    19 print(q.ppp)
    20 q.name = "sha bi"


      类的三种方法

        实例方法: 需要实例化对象才能使用
        静态方法: 不许哟啊实例化,通过类直接使用
        类方法: 不需要实例化

    class Person()
        # 实例方法
        def eat(self):
            print(self)
            print("eating......")
        # 类方法
        @classmethod
        def play(cls):
            print(cls)
            print("playing.....")
        # 静态方法
        @staticmethod
        def say():
            print("say......")
  • 相关阅读:
    flume,kafka不在一个内网互相打通.md
    尚硅谷Flink2020教程.md
    常用命令.md
    四象限工作效率-事件管理.md
    甘特图目标实施-进度管控.md
    PDCA循环法.md
    SMART大目标拆解小目标.md
    基于内外部竞争环境和竞争条件下的态势分析
    使用Java正则表达式批量提取文本信息
    使用markdown高效编写博客(创建标题)
  • 原文地址:https://www.cnblogs.com/Burtit/p/9326207.html
Copyright © 2011-2022 走看看