Python中类的相关介绍

本文主要介绍python中类的概念性内容,如类的定义、说明及简单使用

1. 类的简单介绍

 1 # -*- coding:utf-8 -*-
 2 # Author:Wong Du
 3 
 4 '''
 5 ----- 编程范式 -----
 6 1、面向过程
 7     基本设计思路就是程序一开始是要着手解决一个大的问题,
 8     然后把一个大问题分解成很多个小问题或子过程,这些子过程
 9     再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。
10 2、面向对象
11     OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,
12     使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单
13 3、函数式编程
14 
15 Class类
16     一个类即对具有相同属性的对象的抽象描述,如生物类(有生命体征的东西)
17     1、经典类和新式类(深度优先和广度优先)
18     2、构造函数(实例化时进行初始化),def __init__(self,...):
19     3、类变量和实例变量(存放位置、节省空间等)
20     4、析构函数(实例结束或程序结束是执行,用于做一些收尾工作)def __del__(self):
21     5、静态属性和动态属性
22 Object对象
23     一个具体的对象,类实例化后就是一个对象
24 Encapsulation封装
25     在类中数据变更、内部方法调用等对外部用户都是透明的,
26     这使类编程一个容器或胶囊,里面包含着类的数据和方法,用户不可感知
27     封装方法:
28         在类中变量名或方法名前加两个下划线即可
29         如:__n、def __tell():
30 Inheritance继承
31     一个类可以派生出多个子类,继承父类的部分内容
32     1、继承格式,class zi(fu):
33     2、继承中构造函数的执行规则及顺序(只执行一个,先内后外)
34     3、获取父类构造函数的初始化实例变量并在子类中新增变量的两种方法
35         ① fu.__init__(self,a,b)
36         ② super(zi,self).__init__(a,b)
37 Polymorphism多态
38     一个接口,多种调用
39 '''
40 
41 class People:
42     '''
43     类的基本介绍
44     类的定义,类名格式一般首字母大写,此为经典类,
45     py3,多继承为广度优先
46     '''
47     __Author__ = "CaiYun"     # 类变量
48     __Name = "Person"       # 类私有变量
49     def __init__(self,name,age,addr,__priaddr='隐私'):      # 构造函数,用于初始化实例变量
50         self.name = name    # 实例变量
51         self.age = age
52         self.addr = addr
53         self.priaddr = __priaddr    # 实例私有变量
54 
55 
56     # def __str__(self):      # 通过打印类实例化后的实例名来调用,如p=People();print(p)
57     #     return '''
58     #     -----People info-----
59     #         Name: %s
60     #         Age: %s
61     #         Addr: %s''' %(self.name,self.age,self.addr)
62 
63     # def __del__(self):        # 析构函数,用于做一下收尾工作
64     #     print("""
65     #     -----实例化了一个对象-----
66     #         Object: %s
67     #         Name: %s
68     #         Age: %s
69     #         Addr: %s""" %(self,self.name,self.age,self.addr))
70     #     print("程序结束时执行...")
71 
72     def __privileges(self):        # 在方法名前加"两个下划线",则将方法私有化
73         print("这是一个私有方法,做一些私密的事情,外界不可感知。")
74         pass
75     def public(self):
76         print("这是一个公有方法。外界可直接调用")
77         pass
78 
79 class Man(People):      # 新式类
80     def __init__(self,name,age,addr,sex):
81         # People.__init__(self,name,age,addr)   # 使用父类定义相关变量,不建议使用这种方法
82         super(Man,self).__init__(name,age,addr)     # 使用父类定义相关变量,建议使用这种方法
83         self.sex = sex
84         pass
85     def shopping(self):
86         print("%s 要去购物了..." %self.name)
87 
88 
89 p = People("Wong",23,"深圳")
90 # print(p.__Author__)
91 # print(p)
92 # p.__privileges()
93 p.public()
94 # print(p.__priaddr)
95 
96 m = Man("Wong",23,"深圳",'boy')
97 print(m.name,m.age,m.sex)
98 m.shopping()

2. 类的继承

# -*- coding:utf-8 -*-
# Author:Wong Du

class SchoolMember(object):
    '''
    学校成员基类,用于被继承创建各类学校成员
    '''
    MemberCount = 0
    SchMem_list = []
    def __init__(self, name, age, id=None):
        '''
        构造函数,初始化基础环境变量
        :param name:
        :param age:
        :param id:
        '''
        self.name = name
        self.age = age
        self.id = id

    def tell(self):
        '''介绍方法'''
        pass

    def enroll(self):
        '''
        注册方法,用于统计注册人员信息
        :return:
        '''
        SchoolMember.MemberCount += 1
        print("\033[32;1m SchoolMember [%s] is enrolled, now there are [%s] members\033[0m"
              %(self.name,SchoolMember.MemberCount))
        self.SchMem_list.append(self)

    # def __del__(self):
    #     '''析构函数'''
    #     print("\033[31;1m SchoolMember [%s] has resigned! \033[0m" %self.name)

class Teather(SchoolMember):
    '''
    教师成员,继承父类SchoolMember,
    用于创建学校成员:教师
    '''
    def __init__(self, name, age, course, salary, tid=None):
        '''
        构造函数,创建初始化教师信息
        :param name:
        :param age:
        :param course:
        :param salary:
        :param tid:
        '''
        super(Teather, self).__init__(name, age)
        self.course = course
        self.salary = salary
        self.tid = tid
        self.enroll()

    def tell(self):
        '''介绍方法'''
        print("\033[33;1m Hi, I am your [%s] course teather, my name is [%s], nice to meet you...\033[0m"
              %(self.course, self.name))

    def teching(self):
        '''教授课程说明'''
        print("\033[34;1m Teacher [%s] is teching the [%s] course...\033[0m" %(self.name, self.course))

class Student(SchoolMember):
    '''
    学生成员,继承父类SchoolMember,
    用于创建学校成员:学生
    '''
    def __init__(self, name, age, grade, sid=None):
        super(Student, self).__init__(name, age)
        self.grade = grade
        self.sid = sid
        self.enroll()

    def tell(self):
        '''自我介绍方法'''
        print("\033[33;1m Hi, My name is [%s], nice to meet you...\033[0m" %self.name)

t1 = Teather('Yangyue','37','数学','10000')
t2 = Teather('Zhaoyun','28','武术','12000')

s1 = Student('Caiyun','23','Python')
s2 = Student('Dudu','22','数学')

t1.tell()
t2.teching()
s1.tell()
print(len(SchoolMember.SchMem_list))
# print(SchoolMember.SchMem_list[1].name)
for i in range(len(SchoolMember.SchMem_list)):
    print(SchoolMember.SchMem_list[i].name)
类的继承

3. 类的多态

# -*- coding:utf-8 -*-
# Author:Wong Du

class Conpany(object):
    def __init__(self,type,name,money):
        self.type = type
        self.name = name
        self.money = money

class Menber(object):
    def __init__(self,post,name):
        self.post = post
        self.name = name
    @staticmethod
    def Polymorphism(obj):
        obj.work()

class Boss(Menber):
    def work(self):
        print('Boss')


class HR(Menber):
    def work(self):
        print('HR')
c1 = Conpany("电商", "云云易购", "10000000")


h1 = HR('HR','wanchun')
b1 = Boss('Boss','caiyun')

Menber.Polymorphism(h1)
Menber.Polymorphism(b1)
类的多态

猜你喜欢

转载自www.cnblogs.com/Caiyundo/p/9480346.html