python面向对象代码示例

三世轮回 提交于 2019-11-29 21:41:19
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# a class definition
class MyClass:
    """一个简单的类定义 A Simple Example Class"""
    i = 1234  #类的成员变量 
    def f(self):#类的成员函数
        return "Hello World"
        
x = MyClass()
print MyClass.__doc__
print x.__doc__

#显示定义一个类的初始化方法
class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
        
x = Complex(3.0, -4.5)
print x.r, x.i
x.counter = 2 #instance attribute
print x.counter # print Complex.counter将出错
del x.counter

#类的成员函数也可以在外部定义
def f1(self, x, y):
    return min(x, x+y)

class C:
    f = f1
    def g(self):
        return 'hello world'
    h = g
#这样C.f C.h C.g都是合法的函数对象

#在类的函数定义中,可以使用self引用类的其他成员变量或函数对象
class Bag:
    def __init__(self):
        self.data = []
    def add(self, x):
        self.data.append(x)
    def addtwice(self, x):
        self.add(x)
        self.add(x)

#继承与多重继承
class BaseClassName:
    pass
  
class DerivedClass(BaseClassName):
    pass
   
class BaseClassName2:
    pass
  
class DerivedClass2(BaseClassName, BaseClassName2):
    pass
  
#实用方法isintance issubclass
d = DerivedClass2()
print isinstance(d, BaseClassName)
print issubclass(DerivedClass2, BaseClassName2)

#私有变量
#在python中,没有真正意义上的私有概念,一般约定命名中以下划线开头的变量或函数为私有的。
class Mapping:
    def __init__(self, iterable):
        self.items_list = []
        self.__update(iterable)

    def update(self, iterable):
        for item in iterable:
            self.items_list.append(item)

    __update = update   # private copy of original update() method

class MappingSubclass(Mapping):

    def update(self, keys, values):
        # provides new signature for update()
        # but does not break __init__()
        for item in zip(keys, values):
            self.items_list.append(item)
            
#类似C中的结构体的使用
class Employee:
    pass

john = Employee() # Create an empty employee record

# Fill the fields of the record
john.name = 'John Doe'
john.dept = 'computer lab'
john.salary = 1000

#在python中,用户自定义的异常也被认为是类
#有两种形式raise Class, instance 和 raise instance
class B:
    pass
class C(B):
    pass
class D(C):
    pass

for c in [B, C, D]:
    try:
        raise c()
    except D:
        print "D"
    except C:
        print "C"
    except B:
        print "B"

#迭代器的实现
class Reverse:
    """Iterator for looping over a sequence backwards."""
    def __init__(self, data):
        self.data = data
        self.index = len(data)
    def __iter__(self):
        return self
    def next(self):
        if self.index == 0:
            raise StopIteration
        self.index = self.index - 1
        return self.data[self.index]
        
rev = Reverse('spam')
for char in rev:
    print char

#产生器
def reverse(data):
    for index in range(len(data)-1, -1, -1):
        yield data[index]
        
for char in reverse('golf'):
    print char


转载于:https://my.oschina.net/fuyajun1983cn/blog/263794

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!