[python 学习] 类

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

 

posted @ 2017-11-04 15:02  那天ws  阅读(172)  评论(0编辑  收藏  举报