#!/usr/bin/python # -*- encoding:utf-8 -*- class Animal: animal_num = 0 class Dog(Animal): #类帮助文档 'this is help' #两个下划线开头,类的私有属性,不能在类外部访问,类内部使用self.__dog_name访问 __Dog_name = 'dahuang' dog_num = 0 #累的构造函数,初始化实例时调用 def __init__(self, name, color): self.color = color self.name = name Dog.dog_num += 1 #类变量在内部类中调用 #self代表类的实例,类内部的函数必须包含且第一个参数为 self def prt(self): print self print self.__class__ #self不是python关键字,可以使用其他代替 def prt_2(self_2): print self_2 print self_2.__class__ def printDogName(self): print self.name #__private_method类的私有方法,调用self.__private_method def __get_Dog_name(self): return self.__Dog_name def get_Dog_name(self): return self.__get_Dog_name() #输出对象实例时调用(print) #或使用str(obj)调用 def __str__(self): return 'print 时调用' #repr(obj) def __repr__(self): return '直接输出对象,使用print打印时调用,或repr(obj)' # 析构方法 def __del__(self): print '对象被删除' #实例化 d = Dog('jack','red') #同 print d str(d) #同 print d repr(d) #调用析构方法 # del d d.prt() d.prt_2() print d.get_Dog_name() #dahuang #_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * #通过 object._className_attrName访问累的私有变量 print d._Dog__Dog_name #dahuang #放问类的私有方法同上 print d._Dog__get_Dog_name() #dahuang #添加属性 d.age = 10 #修改属性 d.age = 12 # del删除属性 del d.color #使用函数操作属性 hasattr(d,'age') #如果存在 ‘age’ 属性返回 true getattr(d, 'age') #返回 ‘age’ 属性的值 setattr(d, 'age', 13) #添加属性 ‘age 的值为13 delattr(d, 'age') #删除属性 'age' #内置类属性 #__dict__:类的属性 #{'__module__': '__main__', 'printDogName': <function printDogName at 0x02B3B9B0>, # 'prt_2': <function prt_2 at 0x02B3B970>, 'prt': <function prt at 0x02B3B8F0>, # 'dog_num': 1, '__doc__': 'this is help', '__init__': <function __init__ at 0x02B3B9F0>} print Dog.__dict__ #__name__:类名 #Dog print Dog.__name__ #__module__:类定义所在的模块 #__main__ print Dog.__module__ #__bases__:类的所有父类构成的元素 #(<class __main__.Animal at 0x038AABC8>,) print Dog.__bases__ #打印类说明 print Dog.__doc__