zoukankan      html  css  js  c++  java
  • 细分类的组成成员

    细分类的组成成员

    成员有以下:
    1、字段: 静态字段 普通字段
    2、方法: 静态方法 类方法 普通方法
    3、特性/属性 普通特性

    成员修饰符 修饰成员
    公有的:没有限制
    私有的:以__开头 仅仅内部可以访问,不能被继承,仅自己可访问。私有的成员可通过公有的成员间接访问

    何时用类调用,何时用对象调用?
    类调用: 无self
    对象调用:self

    结论

    1、静态字段和静态方法和类方法通过类来访问,普通字段和方法通过对象来访问
    2、静态方法,使用@staticmethod来装饰
    3、类方法,使用@classmethod来装饰
    4、属性(特性),使用@property来装饰,定义的时候类似普通方法一样,但调用的时候像普通字段一样
    5、属性的getter和setter,通过@property来装饰的方法return来getter,之后通过@方法名.setter装饰的方法来setter

    一些特殊的成员

    init 构造方法,创建对象时调用
    del 析构方法,销毁对象时调用
    call 对象() 调用
    getitem 对象[] 来调用
    setitem 对象[] = xxx 来调用
    delitem del 对象[] 来调用
    dict 列出所有的成员 用途:在表单对象中获取表单所有的字段
    参考字典对象dict
    str 类似java中的toString方法,直接打印对象输出的就是该方法的返回值

    方法部分

    class A:
        company_name = 'mcsq'  # 静态变量(静态字段)
        __iphone = '1353333xxxx'  # 私有静态变量(私有静态字段)
        def __init__(self,name,age): #特殊方法
            self.name = name  #对象属性(普通字段)
            self.__age = age  # 私有对象属性(私有普通字段)
        def func1(self):  # 普通方法
            pass
        def __func(self): #私有方法
            print(666)
        @classmethod  # 类方法
        def class_func(cls):
            """ 定义类方法,至少有一个cls参数 """
            print('类方法')
        @staticmethod  #静态方法
        def static_func():
            """ 定义静态方法 ,无默认参数"""
            print('静态方法')
        @property  # 属性
        def prop(self):
            pass
    
    A.a_func(66)
    obj = A()
    obj.a_func(777)  # 对象也可以调用类方法,但是会自动将其从属于的类名传给cls
    

    类的私有成员

    # 类中的私有成员: 私有类的静态属性, 私有对象属性,私有方法
    # 对于类的公有静态属性,类的外部,类的内部,派生类都可以访问.
    # 私有静态属性: 类外部不能访问,类内部可以访问 ,派生类不可访问
    # 对象的私有属性# 类的内部可以使用 ,类的外部不能访问 ,派生类中也不可访问
    
    # 如果想设定一些私有的或者是不想让类外面用到,密码,加密方式,等设置成私有成员.
    # 拓展: 私有成员除了在类内部,当真访问不到么?
    # python中所有的私有成员: 就是在私有成员前面加上 _类名而已.
    # print(A._A__girlnum)  # 千万不要这么去访问!!!
    

    类方法与静态方法

    # 类方法
    # @classmethod  # 类方法: 由类名直接调用的方法,他会自动的将类名传给cls
    # 对象也可以调用类方法,但是会自动将其从属于的类名传给cls
    #  @staticmethod  静态方法: 不依赖于类,也不依赖于对象,他就是一个普通的函数放置于类中是结构更加清晰与合理.
    

    属性

    # 我们要让类方法伪装成属性,虽然在代码级别没有提升,但是看起来更合理.
    # @property
    # def aaa(self):
    #     print('get的时候运行我啊')
    # @aaa.setter
    # def aaa(self,v):
    #     print('修改的时候执行我')
    # @aaa.deleter
    # def aaa(self):
    #     print('删除的时候执行我')
    

    isinstance issubclass

    # isinstance(obj,N): 判断 obj对象 是由N类(N的派生类)实例化的对象 返回 True.
    # issubclass(M,N) 判断是M类是N类的子孙.
    
    # type 到底是什么?
    # type 元类 python中一切皆对象 , 一个类也是一个对象.
    # 么这个(类)对象肯定是由类实例化出来的.
    # python中你创建的所有类,以及大部分list str等等这些类,都是从type元类实例化得来的.
    # python中继承object类都是新式类.
    # object 也是由type元类实例化得来的.
    # type
    

    函数vs 方法

    # 1 通过函数名可以大致判断
    # print(func)  # <function func at 0x00000000005D1EA0> 函数
    # obj = A()
    # print(obj.func)  # <bound method A.func of <__main__.A object at 0x0000000001DE1CF8>> 方法
    
    # 2. 通过types模块去验证
    # from types import FunctionType #返回bool True就是函数
    from types import MethodType
    # 类名调用func 就是一个函数
    # print(isinstance(A.func, FunctionType)) #True   函数
    # 对象调用func 就是一个方法
    # print(isinstance(obj.func, FunctionType))
    # 对于静态方法的研究
    # print(isinstance(A.f, FunctionType))
    
    # 结论
    # 1. 类⽅法.不论任何情况,都是⽅法.
    # 2. 静态方法,不论任何情况.都是函数
    # 3. 实例方法,如果是实例访问.就是⽅法.如果是类名访问就是函数.
    # 函数与方法
    # 函数: 全都是显性传参
    # 方法: 存在隐性传参
    
  • 相关阅读:
    转:彻底搞清楚javascript中的require、import和export
    转:博客园新随笔 添加锚点
    转:深入浅出空间索引:为什么需要空间索引
    转:常见的空间索引方法
    可视化&地图__公司收集
    js json转xml(可自定义属性,区分大小写)
    Python3.6之给指定用户发送微信消息
    微信服务号发送模板消息
    log4j封装方法,输出集合
    Java封装servlet发送请求(二)
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12386603.html
Copyright © 2011-2022 走看看