OOP

2018-05-22  本文已影响0人  viean

类定义

class Student(object):
    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print '%s: %s' % (self.__name, self.__score)

说明:init为构造函数,第一个参数为self为函数本身。
类成员以双下划线开头,说明为private访问限制的,类实例不能直接访问。(一个下划线开头的实例变量名,外部是可以访问的。其实双下划线的变量,python将其改名为"类名变量名",类实例可以通过如上标识访问,但是、总之访问这些变量是不好的。)

类继承

class Animal(object):
    def run(self):
        print 'Animal is running...'

class Dog(Animal):
    pass

class Cat(Animal):
    def run(self):    #方法的overwrite
        print 'Dog is running...'

dog = Dog()
dog.run()

cat = Cat()
cat.run()

#多态--父类是参数
def run_twice(animal):
    animal.run()
    animal.run()

#如下两个都可以正常运行
run_twice(Animal())
run_twice(Dog())

类继续可以共用父类公共方法,可重写父类的不适宜方法;
多态在类作为参数时,可以接收父类型的参数,把子类视作父类型参数进行调用。

type() 方法可获取对象类型

import types
types模块中有相应类型定义

>>> type('abc')==types.StringType
True
>>> type(u'abc')==types.UnicodeType
True
>>> type([])==types.ListType
True
>>> type(str)==types.TypeType
True

有一种类型就叫TypeType,所有类型本身的类型就是TypeType

isinstance() 判断变量是否为某类实例

dir() 获得一个对象的所有属性和方法

len() 返回对象长度(自动去调用该对象的len()方法)

>>> class MyObject(object):
...     def __init__(self):
...         self.x = 9
...     def power(self):
...         return self.x * self.x
...
>>> obj = MyObject()

>>> hasattr(obj, 'x') # 有属性'x'吗?
True
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404
#如上也可以应用于方法
上一篇下一篇

猜你喜欢

热点阅读