初始Python类

一、定义类、子类、类的实例化、子类的实例化、继承、实例属性和实例方法

示例:

class Fruit():
    '''
    定义一个水果类,包含水果的一些属性和一些方法。
    '''
    def __init__(self,name,color,shape,taste):
        self.name = name
        self.color = color
        self.shape  = shape
        self.taste = taste
        print(self.name+"的小时候是这样的,它的颜色是:"+self.color+",它的形状是:"+self.shape+",它的味道是:"+self.taste)
    def colorChange(self,new_color):
        self.color = new_color
        print(self.name + "的颜色变成了:"+self.color)
    def sizeChange(self,new_size):
        self.shape = new_size
        print(self.name + '的大小变成了:'+self.shape)
    def tasteChange(self,new_taste):
        self.taste = new_taste
        print(self.name + '的味道变成了:'+self.taste)
    def growUp(self):
        print("慢慢的它长大了...")

class waterFruit(Fruit):
    '''
    定义一个水分多的水果类,包含多水分的属性和一些方法。
    '''
    def __init__(self,name,color,shape,taste,water_pencent):
        # Fruit.__init__(self,name,color,shape,taste)
        self.name = name
        self.color = color
        self.shape  = shape
        self.taste = taste
        self.water_pencent = water_pencent
        print(self.name+"的小时候是这样的,它的颜色是:"+self.color+",它的形状是:"+self.shape+",它的味道是:"+self.taste+",它的水分是:"+self.water_pencent)
    def waterChange(self,new_water):
        self.water_pencent = new_water
        print(self.name + "的水分变成了:" + self.water_pencent)
banana = Fruit('香蕉','绿色','长条形','微甜')
banana.growUp()
banana.colorChange('黄色')
banana.sizeChange('椭圆形')
banana.tasteChange('很甜')
watermelon = waterFruit('西瓜','绿色','圆形','甜的','90%')
watermelon.growUp()
watermelon.waterChange("95%")
watermelon.tasteChange("超级甜")

 二、类属性

1、类的数据属性:它是静态的类属性,直接绑定在类上而不是某个实例上,在使用时通过类+"."操作符+属性来调用。如下例:

>>> class foo():
    foo = 100
>>> 
>>> print(foo.foo)
100
>>> foo.foo += 1
>>> print(foo.foo)
101
>>> 

 

2、方法(也是类的属性):必须通过实例去调用,类不能直接调用。

>>> class foo():
    foo = 100
    def doNothing(self):
        print('Do nothing!')
>>> 
# 必须先实例化对象:
>>> fooAction = foo()
>>> fooAction.doNothing()
Do nothing!
# 直接用类调用方法时报错:
>>> foo.doNothing()
Traceback (most recent call last):
  File "<pyshell#19>", line 1, in <module>
    foo.doNothing()
TypeError: doNothing() missing 1 required positional argument: 'self'

 

3、查看类的属性:

# 1:通过内建函数dir()查看类的内部属性,返回的是一个属性列表
>>> dir(foo)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'doNothing', 'foo']
# 2:通过类的__dict__属性查看,返回的是一个字典,key是属性名,value是具体的值。
>>> foo.__dict__
mappingproxy({'foo': 100, 'doNothing': <function foo.doNothing at 0x0000029E039C7F28>, '__weakref__': <attribute '__weakref__' of 'foo' objects>, '__dict__': <attribute '__dict__' of 'foo' objects>, '__doc__': None, '__module__': '__main__'})
>>> print(foo.__dict__)
{'foo': 100, 'doNothing': <function foo.doNothing at 0x0000029E039C7F28>, '__weakref__': <attribute '__weakref__' of 'foo' objects>, '__dict__': <attribute '__dict__' of 'foo' objects>, '__doc__': None, '__module__': '__main__'}

 

4、一些类的特殊属性

# 类的名字:
>>> print(foo.__name__)
foo
# 类说明
>>> foo.__doc__
>>> print(foo.__doc__)
None
>>> 
>>> class fooo(foo):
    pass
# 类的所有父类构成的元组
>>> print(foo.__bases__)
(<class 'object'>,)
>>> print(fooo.__bases__)
(<class '__main__.foo'>,)
>>> 
# 类属性的字典查看方法
>>> print(foo.__dict__)
{'foo': 100, 'doNothing': <function foo.doNothing at 0x0000029E039C7F28>, '__weakref__': <attribute '__weakref__' of 'foo' objects>, '__dict__': <attribute '__dict__' of 'foo' objects>, '__doc__': None, '__module__': '__main__'}
# 定义类foo所在的模块:
>>> print(foo.__module__)
__main__
>>> 
# 实例foo1所对应的类:
>>> print(foo1.__class__)
<class '__main__.foo'>
>>> 

 

posted @ 2016-03-25 00:07  疯狂的杰瑞  阅读(1371)  评论(0编辑  收藏  举报