面向对象类的特殊成员方法

类的特殊成员方法:
1.__doc__ : 打印类下面的注释

2.__module__和__class__:
from lib.aa import C
输出类被导出的模块名lib.aa,输出类的模块名和类名<class lib.aa.C>

3.__init__和__del__
注:析构方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,
所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的

4.__call__ 对象后面加括号,触发执行。
注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()()

class Foo(object):
    def __init__(self):
        print("__init__")
    def __call__(self, *args, **kwargs):
        print("__call__")

f = Foo()  #输出__init__
f()        #输出__call__

5.__dict__方法,查看类或对象中所有成员字典形式

class Province:

    country = ‘China‘

    def __init__(self, name, count):
        self.name = name
        self.count = count

    def func(self, *args, **kwargs):
        print ‘func‘

# 获取类的成员,即:静态字段、方法、
print Province.__dict__
# 输出:{‘country‘: ‘China‘, ‘__module__‘: ‘__main__‘, ‘func‘: <function func at 0x10be30f50>, ‘__init__‘: <function __init__ at 0x10be30ed8>, ‘__doc__‘: None}

obj1 = Province(‘HeBei‘,10000)
print obj1.__dict__
# 获取 对象obj1 的成员
# 输出:{‘count‘: 10000, ‘name‘: ‘HeBei‘}

obj2 = Province(‘HeNan‘, 3888)
print obj2.__dict__
# 获取 对象obj1 的成员
# 输出:{‘count‘: 3888, ‘name‘: ‘HeNan‘}

6.__str__:打印对象的时候,打印返回__str__的返回值

class Dog(object):
    def __init__(self, name):
        self.name = name
        self.__food = None
    def __str__(self):
        return self.name

d = Dog("labuladuo")
print(d)  # labaladuo

7.__getitem__、__setitem__、__delitem__:字典封装成一个实例,对用户来说以为访问的是字典,实际上是实例,可以进行权限控制等

class Foo(object):
    def __getitem__(self, key):
        print(‘__getitem__‘, key)

    def __setitem__(self, key, value):
        print(‘__setitem__‘, key, value)

    def __delitem__(self, key):
        print(‘__delitem__‘, key)

obj = Foo()

result = obj[‘k1‘]  # 自动触发执行 __getitem__
obj[‘k2‘] = ‘alex‘  # 自动触发执行 __setitem__
del obj[‘k1‘]       # 自动触发执行 __delitem__

8。__new__和__metaclass__

#type创建Foo
#普通方式:

class Foo(object):
    def __init__(self,name)
        self.name=name
    def fun(self):
        print("func.....",self.name)

#特殊方式:
def __init__(self,name)
    self.name=name

def func(self):
    print("func.....")

Foo = type("Foo",(object,),{"fun":func,
                            "__init__":__init__})
f = Foo("alex")
f.fun()

Foo类本身也是一个对象,那么Foo类对象应该也是通过执行某个类的 构造方法 创建。可以看出是type类

So ,记住,类 是由 type 类实例化产生

那么问题来了,类默认是由 type 类实例化产生,type类中如何实现的创建类?类又是如何创建对象?

答:类中有一个属性 __metaclass__,其用来表示该类由 谁 来实例化创建,所以,我们可以为 __metaclass__ 设置一个type类的派生类,从而查看 类 创建的过程。

f=Foo()的过程可以看做,先创建Foo对象,再调用它的metaclass中的__call__方法。Python2中的特性

时间: 2024-10-25 12:28:10

面向对象类的特殊成员方法的相关文章

day6面向对象--类的特殊成员方法

类的特殊成员方法 1. __doc__ 表示类的描述信息 class Func(object): '''__doc__方法是用来打印类的描述信息''' def tell(self): pass def enroll(self): pass print(Func.__doc__) # 输出:类的描述信息运行结果如下:__doc__方法是用来打印类的描述信息 __doc__是用来打印类的描述信息.就是类的注释.     2.__module__和__class__ __module__表示当前操作的

【Python】面向对象--类的特殊成员方法

类的特殊成员方法 1. __doc__ 表示类的描述信息 class Func(object): '''__doc__方法是用来打印类的描述信息''' def tell(self): pass def enroll(self): pass print(Func.__doc__) # 输出:类的描述信息运行结果如下:__doc__方法是用来打印类的描述信息 __doc__是用来打印类的描述信息.就是类的注释.     2.__module__和__class__ __module__表示当前操作的

面向对象 类和对象

//面向对象     类     对象 //类是对象的抽象化//对象是类的实例化 class Ren{ //成员变量 var $tpo; var $zhong; var $name; var $sex; //成员方法 function Eat() { echo "正在用手吃饭";  } function Run() {  echo "跑的很快"; }} //实例化对象$r=new Ren();$r->name="张三";echo $r-&g

Php面向对象 – 类常量

类常量:类中,保存运行周期内,不变的数据. 定义: const关键字 const 常量名 = 常量值 例子: class Student { public  $stu_id; public  $stu_name; public  $stu_gender; const  GENDER_MALE = '男'; const  GENDER_FEMALE = '女'; } 类常量不受访问限定修饰符的限制 访问: 类::常量名 例子: class Student { public  $stu_id; pu

类的特殊成员方法

类的特殊成员方法 1.__doc__  表示类的描述信息 class Dog(object): '''这个是描述狗的一个类''' def __init__(self,name): self.name = name self.__weight = 100 def sayhi(self): print('my wigth is ', self.__weight,) d = Dog('二哈') print(d.__doc__) #这个是描述狗的一个类 print(Dog.__doc__) #这个是描述

《转》面向对象类设计原则

面向对象类的设计原则 1                 SRP(单一职责原则) 这个原则看起来很简单,就是说一个类只能承担一个职责. 但这里有一个关键:"职责"是如何理解的? 按照汉语的理解,职责其实分为两部分:"职"和"责"."职"就是这个类是什么,而"责"就是这个类要干什么. 举个例子来说:Door是一个对象,那么它的"职"就是门,"责"就是"开门.关

php面向对象类中常用的魔术方法

php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct() class construct{ public function __construct(){ $this->var = "this is var"; } } class con2 extends construct{ public function __construct(){ $

面向对象类成员

面向对象类成员:字段,方法,属性 一.字段: 举个例子: class Foo: def __init__(self, name): self.name = name 其中的self.name就是字段,不过这是一个普通的字段,保存在对象中,可以通过对象去访问例如: 1 obj = Foo("DJC") 2 print(self.name) 3 4 >>>DJC 除了普通字段还有静态字段来看以下代码: class Foo: s = 123 def __init__(sel

Java基础知识:面向对象&类图

类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称.在系统中,每个类都具有一定的职责,职责指的是类要完成什么样的功能,要承担什么样的义务.一个类可以有多种职责,设计得好的类一般只有一种职责.在定义类的时候,将类的职责分解成为类的属性和操作(即方法).类的属性即类的数据职责,类的操作即类的行为职责.设计类是面向对象设计中最重要的组成部分,也是最复杂和最耗时的部分. 1.面向对象特性 1)抽象 2)继承 3)封装 4)多态 2.类图: 在软件系统