类的特殊成员

1.__doc__ 表示类的描述信息

class Food(object):
    "定义一个食物类"

    pass

print(Food.__doc__)

#输出

定义一个食物类

  

2.__module__ 和 __class__

__module__ 表示当前操作对象在哪个模块

__class__    表示当前操作对象的类是什么

class A(object):

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

  

from local.obj import A

a = A(‘bigberg‘)
print(a.__module__)
print(a.__class__)

# 输出
local.obj                       # local.obj , 输出模块
<class ‘local.obj.A‘>      # local.obj.A , 输出类

  

3. __init__ 构造方法

通过类创建对象时,自动触发执行

class Person(object):

    country = ‘CN‘   # 公有属性

    def __init__(self, name, age, gender, province):
        self.name = name
        self.age = age
        self. gender = gender
        self.province = province

p = Person(‘bigberg‘, 22, ‘M‘, ‘zhejiang‘)

  

4. __del__ 析构方法

当对象在内存中被释放时,自动触发执行,是程序自动执行的不需要人为参与

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

class Person(object):

    country = ‘CN‘

    def __init__(self, name, age, gender, province):
        self.name = name
        self.age = age
        self. gender = gender
        self.province = province

    def __del__(self):
        print("该对象已经被删除!")

p = Person(‘bigberg‘, 22, ‘M‘, ‘zhejiang‘)
print(p.name)
del p
print(p.age)

# 输出
bigberg
该对象已经被删除!
Traceback (most recent call last):
  File "G:/python/untitled/study6/类的特殊成员.py", line 34, in <module>
    print(p.age)
NameError: name ‘p‘ is not defined

  

5.__dict__ 类或对象中的所有成员

把类中的成员以字典的形式打印出来

 1 class Person(object):
 2
 3     country = ‘CN‘
 4
 5     def __init__(self, name, age, gender, province):
 6         self.name = name
 7         self.age = age
 8         self. gender = gender
 9         self.province = province
10
11     def speak(self, language):
12         print("%s mother language is %s" % (self.name, language))
13
14
15 p = Person(‘bigberg‘, 22, ‘M‘, ‘zhejiang‘)
16
17 # 获取类的成员,即:构造函数的属性
18 print(Person.__dict__)
19
20 #输出: {‘speak‘: <function Person.speak at 0x0000025CCBACE510>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Person‘ objects>, ‘__doc__‘: None, ‘__init__‘: <function Person.__init__ at 0x0000025CCBACE488>, ‘country‘: ‘CN‘, ‘__module__‘: ‘__main__‘, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Person‘ objects>}
21
22
23 # 获取对象 p 的成员
24 print(p.__dict__)
25
26 #输出: {‘name‘: ‘bigberg‘, ‘province‘: ‘zhejiang‘, ‘gender‘: ‘M‘, ‘age‘: 22}

6.__call__ 对象或类后面加括号,触发执行

class Person(object):

    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print(‘hello,world‘)

p = Person()    # 执行 __init__
p()                  # 执行 __call__

# 输出

hello,world

  

7.__str__ 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

 1 class Person(object):
 2
 3     def __init__(self, name):
 4         self.name = name
 5
 6     def __call__(self, *args, **kwargs):
 7         print(‘hello,world‘)
 8
 9     def __str__(self):
10         return "It‘s a good day."
11
12     def speak(self):
13         return "%s is giving a speech." % self.name
14
15 p = Person(‘bigberg‘)
16 p.speak()
17 print(p)
18
19 #输出
20 It‘s a good day.

时间: 2024-10-16 01:24:21

类的特殊成员的相关文章

类的const成员

类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他的const成员函数,而不能访问非const成员函数 const可以修饰static数据成员,在定义时初始化,但仍要在类外进行声明 const成员函数不能修改类的对象,即不能修改数据成员,但当数据成员被mutable修饰时,可以修改 const不能修饰static成员函数,因为const表示不修改类

静态方法中访问类的实例成员

public class StaticShiLi { static int i=1; int j=2; static void m(){ System.out.println(j);报错 } public static void main(String[] args) { // TODO Auto-generated method stub } } 程序报错,显示无法访问. 疑问:那么怎样在静态方法中访问类的实例成员呢?

如何初始化类的static成员变量?

类的static成员变量不被某一个对象所独有,而是被所有同类型的对象所共有. 只能在头文件中声明类的static成员变量,不可在头文件中初始化,否则会造成重定义.必须在另外一个.cpp文件中进行初始化.并且,初始化的时候不可以有static修饰词. [email protected]:~/project/test/static-test/static2_cpp$ cat static.h #ifndef STATIC_H #define STATIC_H #include<iostream>

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

java类中各成员初始化的顺序

了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识.不说太多,直接看下面的例子 class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println("父类代码块初始化" ); } private static String s=print(); public static String print() { System. out.println

学习IOS开问题篇--类中的成员变量如果不实例化是什么情况

@interface Person : NSObject @property (noatonmic,copy) NSString * name; @end 一个person类,name是person得成员变量 如果在一个类中写入person为成员变量 self.person.name = @"zhangsan"; 如果前面不将person实例化,实际上是在对一个空指针进行操作 [nil setname:@"zhangsan"]; 因为oc中对空指针发消息不会报错,所

创建一个三角形类并且通过成员函数计算三角形的周长和面积《1》

首先定义一个三角形类 class Triangle//三角形类 { public: double getA(void);//得到a的值 double getB(void);//得到b的值 double getC(void);//得到c的值 void setA(double x);//设置a的值 void setB(double y);//设置b的值 void setC(double z);//设置c的值 bool isTriangle(void);//取三边的值 double Perimeter

创建一个三角形类并且使用成员函数计算三角形的周长和面积《2》

首先创建一个三角形类 class Triangle//三角形类 { public: void Setabc(double x, double y, double z);//置三边的值,注意要能成三角形 void Getabc(double *x, double *y, double *z);//取三边的值 double Perimeter(void);//计算三角形的周长 double Area(void);//计算并返回三角形的面积 private: double a, b, c; //三边为

基类的protected成员

2014-07-27 星期日 18:10:56 重温下c++ primer,随意记录. 1.基类protected成员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 6

MFC 一个类访问另一个类成员对象的成员变量值

作者:卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/35263857 MFC中一个类要访问另外一个类的的对象的成员变量值,这就需要获得原来那个类对象的指针,其实有好几种方法都可以实现. 比如维护一个单例模式.设置静态变量等等.我们这里举个列子,实现多个类之间的相互访问. 一.示例:创建MFC对话框,实现对个对话框之间数据访问 我们创建一个MFC对话框应用程序,命名为Visit工程. 对话框本身有一个主界面(CVisitDlg对话框