#!/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__