zoukankan      html  css  js  c++  java
  • 类成员

    1. 类的私有成员 -- __

    当你遇到重要的数据,功能,(只允许本类使用的一些方法,数据)将其设置成私有成员.
    

    1.1 类的私有静态属性

    __name = "meet"    # 加 __
    
    #只能在类的内部进行访问、调用,在类的外部以及派生类不能调用。
    

    1.2 类的私有方法

    class A:
        def __func(self):
            print("in __func")
    
    # 只能在类的内部调用
    

    1.3 对象的私有方法

    class A:
        def __init__(self, name):
            self.__name = name
            
    # 只能在类的内部调用
    
    # 总结:
    类的私有成员,只能在类的内部进行访问、调用,不能在类的外部、子类使用。
    
    python所有的私有成员都是纸老虎,形态虚设。
    类在加载时,只要遇到类的私有成员(__),都会在私有成员前加上 _类名;
    可以这样查看,但不能这样调用。
    

    2. 类的其他方法

    2.1 类方法 @classmethod

    类方法是将类本身作为对象进行操作的方法。
    类方法: 一般就是通过类名去调用的方法,并且自动将类的地址传给cls,
    但是如果通过对象调用也可以,但是传的地址还是类名地址.
    
    # 实例化一个对象,记一次数,统计学生个数。
    class Student:
        count = 0
    
        def __init__(self, name, id):
            self.name = name
            self.id = id
            Student.num_student()   # 调用
    
        @classmethod
        def num_student(cls):		# cls 接受类的地址
            cls.count += 1
    
        @classmethod
        def getnum(cls):
            return cls.count
    
    
    obj1 = Student("alex", 25412)
    obj2 = Student("meet", 25413)
    print(Student.getnum())
    
    类方法的作用:
    	1. 得到类名可以实例化对象;
    	2. 可以操作类的属性。
    

    2.2 静态方法 @staticmethod

    不依赖对象与类,其实静态方法就是一个函数。 
    参数可随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;调用还需函数名。
    保证代码规范性,合理划分,以及后续维护性高。
    
    class A:
        @staticmethod
        def func():
            print("这是静态方法!")
    print(A.func())
    

    3. 属性 @property

    工作中如果遇到一些类似于属性的方法名,可以让其伪装成属性。
    property将执行一个函数需要 函数名() 变换成 函数名。
    将动态方法伪装成一个属性,使其看起来更合理。
    

    3.1 装饰器法 -- 获取、修改、删除

    class Foo:
        @property
        def AAA(self):
            print('get的时候运行我啊')
    
        @AAA.setter
        def AAA(self,value):
            print(value)
            print('set的时候运行我啊')
    
        @AAA.deleter
        def AAA(self):
            print('delete的时候运行我啊')
    obj = Foo()
    obj.AAA			# 不加()
    obj.AAA = "aaa"  # 操作命令,不是改变AAA的值,而是执行被AAA.setter装饰器装饰的函数
    del obj.AAA		# 操作命令,不是删除AAA,而是执行被AAA.deleter装饰器装饰的函数
    

    3.2 利用实例化对象的方式设置属性

    class Foo:
        def get_AAA(self):
            print('get的时候运行我啊')
    
        def set_AAA(self,value):
            print(value)
            print('set的时候运行我啊')
    
        def delete_AAA(self):
            print('delete的时候运行我啊')
            
        AAA=property(get_AAA,set_AAA,delete_AAA) 
        #内置property三个参数与get,set,delete一一对应
    
    obj=Foo()
    obj.AAA		# 不加()
    obj.AAA='aaa'	# 操作命令,不是改变AAA的值,而是执行set_AAA函数
    del obj.AAA		# 操作命令,不是删除AAA,而是执行delete_AAA函数
    

    4. 类的内置函数

    4.1 isinstance -- 判断对象与类之间的关系

    class A:
        pass
    class B(A):
    	pass
    class C(B):
        pass
    
    obj = B()
    print(isinstance(obj, B))    # True
    print(isinstance(obj, A))	# True
    print(isinstance(obj, C)) 	# False
    
    # isinstance(obj,class) 判断obj是否是class类的实例化对象,或者obj是否是class派生类的实例化对象,返回Ture/False.
    

    4.2 issubclass -- 判断类与类的关系

    class A:
        pass
    
    class B(A):
        pass
    
    class C(B):
        pass
     
    print(issubclass(B, A))		# True
    print(issubclass(C, A))		# True
    print(issubclass(B, C))		# False
    
    # issubclass(cls1,cls2) 判断cls1类是否是cls2的派生类,或者是否是cls2派生类的派生  (判断cls1类是否是cls2的子孙类)
    

    5. 元类type 构建类

    type元类:获取对象从属于的类
    Python原则是:一切皆对象,其实类也可以理解为'对象',而type元类又称作构建类,python中大多数内置的类(包括object)以及自己定义的类,都是由type元类创造的。
    
    type(str)   # <class 'type'>
    print(type(object))		# <class 'type'>
    print(isinstance(object, type))		# True
    # object类是type元类的一个实例化对象
    print(issubclass(type,object))		# True
    # object类是type元类的父类
    
  • 相关阅读:
    c# CLR无法从 COM 上下文 0x51cd20 转换为 COM 上下文 0x51ce90
    sql语法
    学籍管理系统
    【Android进阶】Android调用WebService的实现
    【Android进阶】自定义控件实现底部扇形展开菜单效果
    华为上机题汇总----java
    卡片游戏(栈和队列)
    18岁生日
    循环多少次?
    Flappy bird源代码(略吊)
  • 原文地址:https://www.cnblogs.com/liwenhu/p/11401567.html
Copyright © 2011-2022 走看看