5.0 python的类

本文深入介绍了Python面向对象编程的基础概念,包括类的初始化、方法定义、属性使用、内部调用、访问权限、文件导入及继承。通过实例展示了如何创建和使用类,如何实现类的私有属性和方法,以及如何进行多继承和调用父类方法。此外,还讨论了如何将类单独保存到文件中以便于后期复用。
摘要由CSDN通过智能技术生成

0x01 类的初始化

初始化类__init__称为构建方法(Constructor)。在python设置类的时候,一定要预定义def __init__(self):函数来处理初始化的类功能,它没有回传值。建构方法的作用是在建构对象的同时,也可以初始化一些必要的信息。

class Myclass(object):
    def __init__(self):
        print("hello")


g = Myclass()

在这里插入图片描述

类的初始化预定义值,__init__(self,name):就能把name放入。

class Myclass(object):
    def __init__(self, name):
        print("hello", name)


g = Myclass("aaa")

在这里插入图片描述

0x02 类中的函数(method)

类中的函数方法与一般函数方法类似,只需要在参数中多加一个self参数。Python类中成员函数的声明必须在第一个参数中使用self,self在调用是是不用回传的。

class Myclass(object):
    def __init__(self, name):
        print("hello", name)

    def run1(self):
        print("fun1")

    def fun3(self, num1=0, num2=0):
        return (num1 * 2) +num2


g = Myclass("Herbert")
g.run1()
print(g.fun3(1, 2))
print(g.fun3(num1=1, num2=2))

运行结果:
在这里插入图片描述

0x03 类中的属性(property)

属性是对象的静态描述,因为Python的属性默认都是公开的,所以都可以取得。在使用是需要通过self才会取得该类中的属性。

class myclass(object):  # 继承python最上层的object类
    mX = 1  # 预定义变量

    def __init__(self, x):  # 类初始化函数
        self.mX = x

    def fun1(self):     # 类中的公开函数
        for x in range(1, self.mX, 1):
            for y in range(1, x+1, 1):
                s = str(x) + "*" + str(y) + "=" + str(x * y)
                print(s, end='\t')
            print()


g = myclass(10)     # 调用和引导类,并初始化数据
g.fun1()    # 运行类中的公开函数fun1


在这里插入图片描述

0x04 类中调用其他的函数方法

来类中调用其他的函数方法是通过self来完成的。在fun1中调用fun2,如下所示:

class myclass(object):  # 继承python最上层的object类
    mX = 1  # 预定义变量

    def __init__(self, x):  # 类初始化函数
        self.mX = x

    def fun1(self):     # 类中的公开函数fun1
        for x in range(1, self.mX, 1):
            for y in range(1, x+1, 1):
                self.fun2(x, y)     # 调用同类中的函数
            print()

    def fun2(self, x, y):    # 类中的公开函数fun2
        s = str(x) + "*" + str(y) + "=" + str(x * y)
        print(s, end='\t')


g = myclass(10)     # 调用和引导类,并初始化数据
g.fun1()    # 运行类中的公开函数fun1

运行结果
在这里插入图片描述

0x05 设置公开、私有的类函数方法

在Python的类中所有的函数方法和属性都是公开的。如果要设置为私有,只需命名时在类函数名称前面添加两个下划线(__)即可

class myclass(object):
    mypub = 1   # 公开属性
    __mypub = 2 # 私有属性

    def __init__(self, x, y):
        self.mypub = x
        self.__mypub = y

    def funpub(self):   # 公开函数
        print("fun1")
        
    def __funpub(self): # 私有函数
        print("fun2")


g = myclass(6, 6)
print(g.mypub)
# print(g.__mypub)  # 不能调用私有属性
g.mypub()
# g.__mypub()       # 不能调用私有函数方法

结果:
在这里插入图片描述
调用会报错,没有该属性。所以私有函数、属性是不能调用的。
在这里插入图片描述

0x06 把类独立成另一个文件

为了维护程序的便利性,会推荐把类独立成另一个文件,以后使用时只要通过import调用该类即可。类的文件名称推荐与类名称相同。

myclass.py

class myclass(object):  # 继承python最上层的object类
    mX = 1  # 预定义变量

    def __init__(self, x):  # 类初始化函数
        self.mX = x

    def fun1(self):     # 类中的公开函数
        for x in range(1, self.mX, 1):
            for y in range(1, x+1, 1):
                s = str(x) + "*" + str(y) + "=" + str(x * y)
                print(s, end='\t')
            print()


然后调用myclass.py 中的fun1函数

from myclass import myclass
g = myclass(10)
g.fun1()

结果:
在这里插入图片描述

0x07 继承——OOP面向对象

	面向对象编程——Object Oriented Programming

一、继承

代码实例,定义一个类myclasschild继承自父类myclass,然后在子类中调用父类函数。

class myclass(object):  # 父类
    def __init__(self, name):
        print("mycalss", str(name))

    def fun1(self):
        print("myclass->fun1")


class myclasschild(myclass):  # 子类,继承myclass类
    def __init__(self, name):
        print("myclasschild", str(name))

    def fun2(self):
        print("myclasschild->fun2")


g = myclasschild("Herbert555")  # 调用子类
g.fun1()    # 因为继承的关系拥有fun1
g.fun2()    # 调用子类函数

结果
在这里插入图片描述
二、多重继承

Python也可以有多重继承,可同时拥有两个或两个以上的父类。

示例:子类同时继承两个父类

class myclass(object):                  # 父类1
    def fun1(self):
        print("myclass->fun1")

class myclass2(object):                 # 父类2
    def fun2(self):
        print("myclass2->fun2")

class myclasschild(myclass, myclass2):  # 子类,同时继承两个类
    def __init__(self, name):
        print("myclasschild", str(name))

    def fun3(self):
        print("myclasschild->fun2")


g = myclasschild("Herbert555")  # 调用子类
g.fun1()    # 因为继承的关系拥有fun1
g.fun2()    # 因为继承的关系拥有fun2
g.fun3()    # 调用子类函数

运行结果:
在这里插入图片描述
三、调用父类函数

python提供调用父类函数super,但在python2和python3中不一样,方法如下:

  • super().fun2()                                       # python3的调用父类函数方法。
  • super(myclasschild,self).fun2                          # python2的调用父类函数方法。

在程序中在子类函数fun2中调用父类:

class myclass(object):                  # 父类
    def fun1(self):
        print("myclass->fun1")
    def fun2(self):
        print("myclass->fun2")

class myclasschild(myclass):            # 子类
    def __init__(self, name):
        print("myclasschild", str(name))

    def fun2(self):
        try:
            super().fun2()                  # python3调用父类函数方法
        except:
            super(myclass, self).fun2()     # python2调用父类函数方法
        print("myclasschild->fun2")


g = myclasschild("Herbert555")  # 调用子类
g.fun1()    # 因为继承的关系拥有fun1
g.fun2()    # 调用子类函数

运行结果:
在这里插入图片描述

四、调用父类属性

同样也可以用super()来调用父属性,如super(myclasschild,self).value3

class myclass(object):                  # 父类
    value1 = 1
    value2 = 2
    value3 = 3

class myclasschild(myclass):            # 子类
    value3 = 13

    def fun1(self):
        print(self.value1)                  # 输出 1 继承父类属性
        print(self.value2)                  # 输出 2 继承父类属性
        print(self.value3)                  # 输出 13 本身类的属性
        print(super(myclasschild, self).value3)     # 输出 3 父类的属性


g = myclasschild()  # 调用子类
g.fun1()

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值