zoukankan      html  css  js  c++  java
  • Python进阶编程 类的成员

    类的成员

    class A:
        company_name='老男孩'        #静态变量
        __iphone='1515151'          #私有静态变量
        def __init__(self,name,age): #特殊方法(双下方法)
            self.name=name          #对象属性
            self.__age=age          #私有对象属性
        def func(self):             #普通方法
            pass
        def __func(self):           #私有方法
            pass
        @classmethod
        def func1(cls):             #类方法
            '''定义类方法 至少有一个cls参数'''
            print('类方法')
        @staticmethod
        def sttic_func():           #静态方法(普通的函数)
            pass
        @property
        def prop (self):            #属性
            pass
    

    对于每一个类的成员而言都有两种形式:

    • 公有成员,在任何地方都能访问
    • 私有成员,只有在类的内部才能方法

    类方法

    • 实例方法
        定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
        调用:只能由实例对象调用。
    
    • 类方法
        定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
        调用:实例对象和类对象都可以调用。
    class A:
        @classmethod
        def func(cls):
            print('666')
    A.func()		#666
    obj=A()
    obj.func()		#666
    
    • 静态方法
        定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
        调用:实例对象和类对象都可以调用。
    
    class TimeTest(object):
        def __init__(self, hour, minute, second):
            self.hour = hour
            self.minute = minute
            self.second = second
    
        @staticmethod
        def showTime():
            return time.strftime("%H:%M:%S", time.localtime())
    
    • 双下方法
     定义:双下方法是特殊方法,他是解释器提供的 由爽下划线加方法名加爽下划线 __方法名__的具有特殊意义的方法,双下方法主要是python源码程序员使用的,
    

    属性

    将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

    class Foo:
        @property
        def AAA(self):
            print('get的时候运行我啊')
    
        @AAA.setter
        def AAA(self,value):
            print('set的时候运行我啊')
    
        @AAA.deleter
        def AAA(self):
            print('delete的时候运行我啊')
    
    #只有在属性AAA定义property后才能定义AAA.setter,AAA.deleter
    f1=Foo()
    f1.AAA
    f1.AAA='aaa'
    del f1.AAA	
    

    isinstace isinstance(a,b):判断a是否是b类(或者b类的派生类)实例化的对象

    class A:
        pass
    class B(A):
        pass
    obj = B()
    
    print(isinstance(obj,B))
    print(isinstance(obj,A))
    isinstance(a,b):判断a是否是b类(或者b类的派生类)实例化的对象
    

    issubclass issubclass(a,b): 判断a类是否是b类(或者b的派生类)的派生类

    class A:
        pass
    class B(A):
        pass
    class C(B):
        pass
    print(issubclass(B,A))
    print(issubclass(C,A))
    

    元类type

    type元类是获取该对象从属于的类,而type类比较特殊,Python原则是:一切皆对象,其实类也可以理解为'对象',而type元类又称作构建类,python中大多数内置的类(包括object)以及自己定义的类,都是由type元类创造的。
    而type类与object类之间的关系比较独特:object是type类的实例,而type类是object类的子类,这种关系比较神奇无法使用python的代码表述,因为定义其中一个之前另一个必须存在。所以这个只作为了解。
    

  • 相关阅读:
    【转】跨域的理解与实现
    【3.5】从今天开始学习WCF技术
    LAB.js使用
    资源文件的动态加载
    C#对图片文件的压缩、裁剪操作初探
    WCF技术剖析_学习笔记之一
    SQL 写入调优
    【转】Nosql,为什么要使用
    wcf配置文件
    wcf错误
  • 原文地址:https://www.cnblogs.com/llwwhh/p/11318034.html
Copyright © 2011-2022 走看看