0%

Python之OOP

面向对象程序设计(Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。

一、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Person:
'人类基类'
num = 0;

def __init__(self, name, age):
self.name = name
self.age = age

def eat(self, food):
self._food(food)

def say(self):
print("Hi,I'm %s" % self.name,",and i'm %d years old" % self.age)

def _food(self, food):
print("This is %s" % food)


def go(self, type):
self.__go_by_type(type)

def __go_by_type(self, type):
print("Go by %s" % type)


class Boy(Person):
'男孩基类'

def __init__(self, name, age, sex):
# super(Boy, self).__init__(name, age)
Person.__init__(self, name, age)
self.sex = sex

def boy_say(self):
print("Hi,I'm %s" % self.name,",and i'm %d years old" % self.age,",and i'm a %s" % self.sex)
'''
p = Person("Tom", 10)
p.say()
p.eat("apple")
p.go("car")
'''

b = Boy('tom',12, 'boy')
b.boy_say()

print(Boy.__doc__, '\n')
print(Boy.__module__, '\n')
print(Boy.__dict__, '\n')
print(Boy.__name__, '\n')
print(Boy.__bases__, '\n')

二、知识点

  1. 定义类,和常见的Java、PHP不同,Python比较简单class ClassName:,类名后一定要有冒号:
  2. 实例化时也比较简单,直接obj = ClassName(self, [arg1, arg2, ...]),根据具体情况传arg1、arg2...
  3. 继承写法class SonClass(ParentClass1, [ParentClass2, ParentClass3...]):,支持多重继承
    • 在子类访问父类的方法有两种方法
      • super(Boy, self).__init__(name, age)
      • Person.__init__(self, name, age)
  4. 类的所有方法第一个参数必填且必须为self,它代表的是类的实例,调用时不必传此参数。
  5. 访问类的属性和方法时直接用访问控制符.,即英文的句号。
  6. 构造函数__init__(self, [arg1, arg2, ...]),析构函数__del__(self)
  7. 访问属性
    • 单下划线_protected代表属性或方法为protected,只能在类内部和子类中进行访问
    • 双下划线__private代表属性或访问为private,只能在类内部进行访问
    • 头尾双下划线__somename__一般为系统定义,如构造函数__init__

三、参考

  1. 参考一