jtyryetwr 发表于 2016-6-29 09:03:11

python面向对象

一、组成:方法和属性。

[*]类定义:

class MyClass():
    def say(self):
      print("hello")
test=MyClass()
test.say()
2.
属性:
self.attr = value
TODO:
普通属性:
静态属性:
方法:
def func():
TODO:
普通方法:
类方法:
静态方法:
3.特殊的方法:
构造函数:
    def __init__(self, name):
      self.name = name
其他的特殊函数
len(x)## x.__len__()
a+b ## a.__add__(b)
a## a.__getitem__(b)
eg:
class MyClass():
    def __init__(self, value):
      self.value = value
    def __add__(self, B):
      self.value = self.value + B.value
    def print_value(self):      
      print(self.value)

class YourClass():
    def __init__(self, value):
      self.value = value

test=MyClass(1)
test+YourClass(2)
test.print_value()

二、特征:封装、继承、多态。

1.继承:
class FClass():
    pass
class S1Class(FClass):
    pass
class S2Class(FClass):
    pass
多继承:
class SSClass(S1Class, S2Class):
    pass
多继承涉及到父类中方法的选择顺序,首先需要明白名词经典类和新风格类。
经典类:class FClass():
新风格类: class FClass(object):
经典类是按照深度优先的顺序进行选择的,即SSCLASS->S1Class->FClass->S2Class
新风格类是按照广度优先的顺序进行选择的,即SSCLASS->S1Class->S2Class->FClass
尽可能的使用新风格类,经典类不支持super,proterty等。
2.多态:
python不支持多态。对于已经熟悉的java, c++,在使用多态的时候,必须传入一个指定的类型,也就是说java和c++是强类型语言,所以出现了多态这样一个概念。
对于python的实现,由于不需要指定类型,因此可以很简单的实现:
eg:
class FClass():
    pass

class S1Class(FClass):
    def show(self):
      print("show1")

class S2Class(FClass):
    def show(self):
      print("show2")

def show(f):
    f.show()

show(S1Class())
show(S2Class())

页: [1]
查看完整版本: python面向对象