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的代码表述,因为定义其中一个之前另一个必须存在。所以这个只作为了解。

posted @ 2019-08-07 21:40  笑oy  阅读(152)  评论(0编辑  收藏  举报
回到顶部